python 多進程

多進程:

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

。。。

參考:

http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431927781401bb47ccf187b24c3b955157bb12c5882d000

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章