目錄:
1. 多線程練習(xí)
2. psutil初識(shí)
3. 小知識(shí)
目錄【Python程序員都知道的入門(mén)知識(shí)】
1. 多線程練習(xí)
for循環(huán)啟動(dòng)五條線程藻糖,打印當(dāng)前處于活躍狀態(tài)的線程數(shù)量:
問(wèn)題出現(xiàn)了,明明for循環(huán)五次叮喳,加上一條主線程也就才六條線程被芳,怎么打印出來(lái)的卻是 <a>''current has 7 threads''</a>,多出一條是什么?
遍歷出所有線程(如下圖)馍悟,可以看出多了一條SockThread 守護(hù)線程畔濒。
那么什么是SockThread,這個(gè)線程又是怎么出現(xiàn)的?
待續(xù)锣咒。侵状。。
在追查過(guò)程中發(fā)現(xiàn)了一個(gè)模塊:psutil
2. psutil初識(shí)
2.1. psutil是什么毅整?
來(lái)看看官方說(shuō)明:
psutil趣兄,即process and system utilities。
是一個(gè)用于檢索當(dāng)前正在運(yùn)行的進(jìn)程和系統(tǒng)資源使用情況(包括:CPU悼嫉,內(nèi)存诽俯,磁盤(pán)、網(wǎng)絡(luò)等)的跨平臺(tái)庫(kù)承粤。
目前在github上有超過(guò)4200個(gè)開(kāi)源工程中使用到了psutil
官網(wǎng)中推薦了這個(gè):Sample暴区,可以參考著練一練。
2.2. 安裝
我是在Windows 64下裝了python2.7 辛臊,所以我下載安裝了:
psutil-5.0.1.win-amd64-py2.7.exe
psutil官方下載地址
psutil官方文檔
2.3. 與系統(tǒng)相關(guān)的函數(shù)
2.3.1. CPU
處理器時(shí)間
1仙粱、psutil.cpu_times(percpu = False)
返回一個(gè)名為scputimes的元組
2、psutil.cpu_times(percpu = True)
返回一個(gè)名為scputimes的元組列表(每個(gè)CPU處理器的各種模式的時(shí)間)
實(shí)際返回的(無(wú)論是單個(gè)元組還是元組列表中的)元素也跟系統(tǒng)有關(guān)彻舰。以下是通有元素說(shuō)明:
- user:處理器處理用戶(hù)(Linux下包括游客)所用的時(shí)間
- system:處理器處理系統(tǒng)內(nèi)核所用的時(shí)間
- idle:什么都不做所花的事
與平臺(tái)相關(guān)的元素:
- nice 【UNIX】
- iowait 【Linux】
- irq【Linux,BSD】
- softirq 【Linux】
- steal 【Linux 2.6.11+】
- guest【Linux 2.6.24+】
- guest_nice 【Linux 3.2.0+】
- interrupt 【W(wǎng)indows】
- dpc 【W(wǎng)indows】
處理器使用頻率
1伐割、
psutil.cpu_percent(interval=None, percpu=False)
2候味、
psutil.cpu_times_percent(interval=None, percpu=False)
處理器數(shù)量
psutil.cpu_count(logical=True)
處理器數(shù)據(jù)
psutil.cpu_stats()
2.3.2. Memory
虛擬內(nèi)存
psutil.virtual_memory()
交換內(nèi)存
psutil.swap_memory()
2.3.3. Disks
磁盤(pán)分配
psutil.disk_partitions(all = False)
磁盤(pán)使用情況
psutil.disk_usage(path)
磁盤(pán)讀寫(xiě)計(jì)數(shù)器
psutil.disk_io_counters(perdisk = False)
2.3.4. Network
網(wǎng)絡(luò)讀寫(xiě)計(jì)數(shù)器
psutil.net_io_counters(pernic = False)
網(wǎng)絡(luò)連接
psutil.net_connections(kind = 'inet')
網(wǎng)絡(luò)適配器關(guān)聯(lián)的地址
psutil.net_if_addrs()
網(wǎng)絡(luò)適配器數(shù)據(jù)
psutil.net_if_stats()
2.3.5. 其他系統(tǒng)信息
引導(dǎo)時(shí)間
psutil.boot_time()
系統(tǒng)當(dāng)前用戶(hù)
psutil.users()
2.4. psutil操作進(jìn)程
2.4.1. 函數(shù)
正在運(yùn)行的進(jìn)程ID列表
psutil.pids()
(為避免出現(xiàn)競(jìng)爭(zhēng)條件,不推薦使用)
根據(jù)進(jìn)程ID判斷進(jìn)程是否在運(yùn)行列表中
psutil.pid_exists(pid)
進(jìn)程ID迭代器
psutil.process_iter()
等待列表進(jìn)程結(jié)束
psutil.wait_procs(procs,timeout = none , callback = none)
2.4.2. 進(jìn)程異常類(lèi)
異掣粜模基類(lèi)
class psutil.Error
無(wú)此進(jìn)程
class psutil.NoSuchProcess(pid ,name = none ,msg = none )
僵尸進(jìn)程
class psutil.ZombieProcess(pid ,name = none ,ppid =none , msg = none)
拒絕訪問(wèn)
class psutil.AccessDenied(pid = none , name = none ,msg = none)
超時(shí)時(shí)間已到
class psutil.TimeoutExpired(second , pid =none ,name = none ,msg = none)
2.4.3. 進(jìn)程類(lèi)Process
class psutil.Process(pid = none)
函數(shù):(詳情移步:psutil.processes)
- oneshot()
- pid
- ppid()
- name()
- exe()
- cmdline()
- environ()
- create_time()
- ad_dict(attrs = none ,ad_value = none)
- parent()
- status()
- cwd()
- username()
- uids()
- gids()
- terminal()
- nice(value = none)
- idnice(ioclass = none ,value = none)
- rlimit(resource , limits = none)
- io_counters()
- num_ctx_switches()
- num_fds()
- num_handles()
- num_threads()
- threads()
- cpu_times()
- cpu_percent(interval = none)
- cpu_affinity(cpus = none)
- memory_info()
- memory_ex()
- memory_full_info()
- memory_percent(memtype = 'rss')
- memory_maps(groups =Ture)
- children(recursive = False)
- open_files()
- connections(kind = 'inet')
- is_running()
- send_signal(signal)
- suspend()
- resume()
- terminate()
- kill()
- wait(timeout = none)
2.4.4. 進(jìn)程開(kāi)啟類(lèi)Popen
class psutil.Popen(*args , **kwargs)
用Popen打開(kāi)兩個(gè)應(yīng)用進(jìn)程:Foxmail.exe
和MockingBot.exe
白群,然后結(jié)束并殺掉這兩個(gè)進(jìn)程。
運(yùn)行結(jié)果:
2.4. Windows系統(tǒng)下的 services
系統(tǒng)服務(wù)迭代器
psutil.win_service_iter()
根據(jù)名字獲取服務(wù)
psutil.win_service_get(name)
Windows服務(wù)對(duì)象
class psutil.WindowsService
- name()
- display_name()
- binpath()
- username()
- start_type()
- pid()
- status()
- description()
- as_dict()
2.5. 常量
3. 小知識(shí)
3.1. python的傳參
python傳參的時(shí)候可以帶上形式參數(shù)名硬霍,如本文中的例子:
psutil.cpu_times(False)
也可以寫(xiě)成:
psutil.cpu_times(percpu = False)
3.2. python的迭代器
假設(shè)現(xiàn)在拿到一個(gè)迭代器帜慢,it
如:it = psutil.win_service_iter()
單個(gè)獲取迭代器中的元素:
it.next()
for循環(huán)獲取元素:
for i in it:
print i
3.3. 僵尸進(jìn)程
進(jìn)程在調(diào)用exit命令結(jié)束自己生命的時(shí)候并沒(méi)有真正被銷(xiāo)毀,而是轉(zhuǎn)為僵尸狀態(tài)唯卖,稱(chēng)為一個(gè)僵尸進(jìn)程
僵尸進(jìn)程需要由他的父進(jìn)程來(lái)收尸粱玲,如果父進(jìn)程結(jié)束則轉(zhuǎn)而由初始化進(jìn)程來(lái)收尸。