多进程模块multiprocessing
multiprocessing模塊就是跨平臺版本的多進程模塊,提供了?個Process類來代表一個進程對象
?
創建?進程時,只需要傳??個執?函數和函數的參數,創建?個
Process實例,?start()方法啟動 ,join()?法可以等待子進程結束后再繼續運行
Process語法結構如下:
Process([group???[,??? target??? [,???name??? [,??? args???[,??? kwargs]]]]])
target:表示這個進程實例所調用對象;
args:表示調用對象的位置參數元組;
?kwargs:表示調用對象的關鍵字參數字典;
name:為當前進程實例的別名;
?group:?多數情況下?不到;
Process類常??法:
is_alive():判斷進程實例是否還在執?;
join([timeout]):是否等待進程實例執行結束,或等待多少秒;
start():啟動進程實例(創建子進程);
run():如果沒有給定target參數,對這個對象調?start()方法時,就講執行對象中的run()?法;
terminate():不管任務是否完成,立即終止;
Process類常?屬性:
name:當前進程實例別名,默認為Process-N,N為從1開始遞增的整數;
pid:當前進程實例的PID值;
from multiprocessing import Process(P必須大寫
import os
import time
?
?
defsub_process_fun(num, a):
??? """子進程執行的代碼"""
??? print("子進程:pid=%d" % os.getpid())
??? print("子進程:num=%d" % num)
??? print("子進程:a=%d" % a)
??? for i in range(10):
??????? print("子進程:hello")
??????? time.sleep(0.1)
?
?
def main():
??? print("父進程:pid=%d" % os.getpid())
? ??p = Process(target=sub_process_fun,args=(100,), kwargs={"a": 200})?
# 創建一個子進程對象
?? ?p.start()? # 真正的創建出子進程,子進程可以開始執行代碼
??? print("父進程:hi")
??? print("父進程:子進程的名字 %s" % p.name)
??? print("父進程:子進程的pid %d" % p.pid)
??? print("父進程:子進程的狀態 %s" % p.is_alive())
??? time.sleep(0.1)
?
? ??p.terminate()? # 終止子進程的執行? 存在延遲
??? print("父進程:已經終止了子進程")
??? print("父進程:子進程的狀態 %s" % p.is_alive())
?
? ??p.join()? # 回收子進程資源? 阻塞
??? print("父進程:已經回收了子進程")
??? print("父進程:子進程的狀態 %s" % p.is_alive())
??? print("父進程:結束")
?
?
if __name__ =='__main__':
??? main()
總結
以上是生活随笔為你收集整理的多进程模块multiprocessing的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php中写salt,请快速检查这个PHP
- 下一篇: Django搜索工具——全文检索