python多进程通信
1. 定义常量或者全局变量无法实现进程间通信,因常量或者全局变量定义的变量保存在进程内,切换进程时即初始化或者销毁
2.可以使用multiprocess模块下的Queue, Pipe进行通信,
Queue和Pipe实现的数据共享方式只支持两种结构 Value 和 Array;
亦可以使用multiprocessing模块下的Manager包里面的Value,Array,list, dict,Queue, Namespace, Lock, RLock, Semaphore, BoundedSemaphore, Condition, Event等数值类型进行通信
from multiprocessing import Process, Queue, Lock from multiprocessing import Manager L = [1, 2, 3] def add(q, lock, a, b): lock.acquire() # 加锁避免写入时出现不可预知的错误 L1 = range(a, b) # q.put(L1) q.append(L1) print(L1) lock.release() if __name__ == '__main__': # q = Queue() manager = Manager() li = manager.list() lock = Lock() p1 = Process(target=add, args=(li, lock, 20, 30)) p2 = Process(target=add, args=(li, lock, 30, 40)) p1.start() p2.start() p1.join() p2.join() print(li) # print(q.qsize()) # print(q.get()) # print(q.get()) # print(L)