IPC :进程之间的通信
1.管道(pipe)
1.1 特点:
两边都可以进出
数据不安全
1.2 方法:
form multiprocessing import Pipe left,right = Pipe() #创造一个管子 left.send() # 从左边放入 right.revc() # 从右边拿出 left.close() # 关闭当前端口,并不是关闭了整个管道
2.队列(Queue)
2.1 本质:
管道 + Lock(锁)
遵循先进先出的原则
2.2 特点:
永远不可能出现数据不安全的情况
多个经常不会同时取走一个数据
2.3 方法:
form multiprocessing import Queue q = Queue(5) # 创建一个队列,并限定队列有多少个元素 q.put() # 向队列中放入一个元素,如果队列满了进入堵塞状态 q.get() # 向队列中取出一个元素,如果队列没有元素进入堵塞状态 q.empty() #判断队列是否是空 , 在多进程内是不可靠的 q.full() # 判断队列是否满了, 在多进程是不可靠的 q.put_nowait() # 如果队列满了报错, q.get_nowait() #如果队列没有元素报错 q.qsize() #看队列现在有多少个元素
2.4 更高级队列 :JoinableQueue
增加 join() 等待所有队列结束
3.数据共享(Manager)
3.1 进程之间的数据共享
不加锁数据会出错
3.2 用法
from multiprocessing import Manage m = Manage #创建一个数据 dic = m.dict({'conut':100}) # 创建一个共享的数据类型 #will support types list, dict, Namespace, Lock, RLock, Semaphore, BoundedSemaphore, Condition, Event, Barrier, Queue, Value and Array. 这么多数据类型