多進程:
fork:
import os
pid = os.fork()
if pid == 0: #如果是子進程
os.getpid() #獲得當前進程id
os.getppid() #獲得父進程id
else:
pid #所產生的子進程id
os.getpid() #當前進程id
和linux下的fork函數一樣,但是fork不能在windows下使用。
我們可以考慮用multiprocessing模塊,multiprocessing模塊是跨平臺的,但是在windows下創建進程還是會出問題
multiprocessing.Process
from multiprocessing import Process #multiprocessing模塊的Process類
def run_proc(name):
pass
p = Process(target=run_proc, args=('process_name',))
p.start()
p.join()
還可以通過Pool模塊一次性啓動大量進程(以進程池的方式)
multiprocessing.Pool
from multiprocessing import Pool #multiprocessing模塊的Pool類
def long_time_task(name):
pass
p = Pool(4) #默認是當前cpu核數multiprocessing.cpu_count
for i in range(5):
p.apply_async(long_time_task,args=(i,))
#生成5個進程,由於當前cpu核數爲4個,所以只能先一次性生成4個進程,等其中一個運行完了,再生成一個
p.close() #不允許再加進程了p.join()
subprocess
import subprocess
print('$ nslookup www.python.org')
r = subprocess.call(['nslookup', 'www.python.org'])
print('Exit code:', r)
生成外部進程(之前的都是父進程生成子進程)
進程通信
很多方法,自己找進程通信庫吧,隊列、管道、消息、共享內存等等
from multiprocessing import Queue
from multiprocessing import Pipes
。。。
參考: