multiprocessing是一個使用類似于線程模塊的API來支持產卵過程的軟件包。 多處理包提供本地和遠程并發,通過使用子進程而不是線程有效地側移全局解釋器鎖。 由于這個原因,多處理模塊允許程序員充分利用給定機器上的多個處理器。 它可以在Unix和Windows上運行。
from multiprocessing import Process
import time
import os
def info(title):
print(title)
print('module name:',__name__)
print('parent process:',os.getppid())
print('process id:',os.getpid())
if __name__ == '__main__':
for i in range(1):
p = Process(target=info,args=(i,))
p.start()
time.sleep(1000)
進程間通訊
from multiprocessing import Queue,Process
def que(data):
data.put(['hello',None,True])
if __name__ == '__main__':
q = Queue()
p = Process(target=que,args=(q,))
p.start()
print(q.get())
from multiprocessing import Process, Pipe
def f(conn):
conn.send(['我是子進程,正在向你發短信'])
conn.close()
if __name__ == '__main__':
parent_conn, child_conn = Pipe()
p = Process(target=f,args=(child_conn,))
p.start()
print(parent_conn.recv())
p.join()
進程間數據共享
Manager()返回的管理器對象控制一個服務器進程,該進程持有Python對象,并允許其他進程使用代理來操縱它們。
Manager()返回的管理器將支持類型列表,字典,命名空間,Lock,RLock,信號量,BoundedSemaphore,Condition,Event,Barrier,Queue,Value和Array。
from multiprocessing import Process, Manager
import os
def f(d,l):
d[os.getpid()] = os.getpid()
l.append(os.getpid())
print(l)
if __name__ == '__main__':
with Manager() as manager:
d = manager.dict()
l = manager.list()
p_list = []
for i in range(10):
p = Process(target=f, args=(d, l))
p.start()
p_list.append(p)
for res in p_list:
res.join()
print(d)
print(l)