》》》》线程中的queue
import threading import queue def f(qq): print("in child",qq.qsize())#打印父进程中q扥数据个数 qq.put([42,None,'hellow'])#往父进程中的q增减新的数据 if __name__ == '__main__': q = queue.Queue()#父进程生成一个q q.put('test123')#往父进程中增加数据 p = threading.Thread(target=f,args=(q,))#生成一个子线程,子线程执行函数f p.start()#执行子线程 p.join()#等待子线程执行结束之后,父进程往下执行 print("444", q.get_nowait())#第一次取q中的数据 print("444", q.get_nowait())#第二次取q中的数据
1,父线程中生成一个q,子线程可以直接对q中的数据进行访问,访问完后父线程可以对子线程放入的数据进行操作,即数据实现了共享
》》》》》》》》进程中的queue
from multiprocessing import Process,Queue import threading def f(qq): print("in child",qq.qsize()) qq.put([42,None,'hellow']) if __name__ == '__main__': q = Queue()#生成一个 q q.put('test123') p = Process(target= f,args=(q,))#生成一个线程,与主线程完全独立的内存地址,将q作为参数传递给函数f p.start() p.join() print("444", q.get_nowait()) print("444", q.get_nowait())
1,区别线程中的queue和进程中的Queue的不同
》》》》》》》》》》》》》》》》Pipe
from multiprocessing import Process,Pipe def f(conn): conn.send([42, None, 'hellow from child1']) print("from parent", conn.recv()) conn.send([42, None, 'hellow from child2']) print("from parent",conn.recv()) conn.close() if __name__ == "__main__": parent_conn , child_conn = Pipe() p = Process(target = f ,args= (child_conn,)) p.start() print(parent_conn.recv()) parent_conn.send('我是主线程过来的1') print(parent_conn.recv()) parent_conn.send('我是主线程过来的2') p.join()
1,parent_conn , child_conn = Pipe()生成电话线两端的实例,相互接受
》》》》》》》》》》》》》manager
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: manager = Manager()#生成一个manager的实例 d = manager.dict()#生成一个字典可在多进程间共享和传递 l = manager.list(range(5))#生成一个列表可在多进程间共享和传递 p_list = [] for i in range(10): p = Process(target=f,args=(d , l ))#生成带两个参数的进程 p.start() p_list.append(p) for result in p_list: result.join()#等待结果 print(d) print(l)
1,with Manager() as manager:
2. manager = Manager()#生成一个manager的实例