展望将来,基于消息传递的并发编程是大势所趋python
即使是使用线程,推荐作法也是将程序设计为大量独立的线程集合,经过消息队列交换数据。数据库
这样极大地减小了对使用锁定和其余同步手段的需求,还能够扩展到分布式系统中。编程
但进程间应该尽可能避免通讯,即使须要通讯,也应该选择进程安全的工具来避免加锁带来的问题。安全
之后咱们会尝试使用数据库来解决如今进程之间的数据共享问题。并发
虽然进程间数据独立,但能够经过Manager实现数据共享,事实上Manager的功能远不止于此。app
A manager object returned by Manager() controls a server process which holds Python objects and allows other processes to manipulate them using proxies.分布式
A manager returned by Manager() will support types list, dict, Namespace, Lock, RLock, Semaphore, BoundedSemaphore, Condition, Event, Barrier, Queue, Value and Array.工具
from multiprocessing import Manager,Process,Lock def work(d,lock): lock.acquire() d['count'] -= 1 lock.release() if __name__ == '__main__': lock = Lock() with Manager() as m: dic = m.dict({'count':100})#生成一个字典,可在多个进程间共享和传递 p_l = [] for i in range(100): p = Process(target=work,args=(dic,lock)) p_l.append(p) p.start() for p in p_l: #等待结果 p.join() print(dic)
{'count':0}ui