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)