博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
进程间数据传递:Queue,Pipe 进程间数据共享:Manager
阅读量:6333 次
发布时间:2019-06-22

本文共 2399 字,大约阅读时间需要 7 分钟。

1.使用multiprocessing模块的Queue实现数据传递

'''进程间通讯:    Queue,用法跟线程里的Queue一样,put,get    线程queue没有做序列化,进程queue做序列化了    父进程的queue怎么传给子进程的?父进程的queue克隆了一份到子进程    按理说两个queue没关系了。子进程向queue里放东西,queue序列化到一个中间地方    父进程取就从中间地方反序列化,他们只是实现的数据的传递'''from multiprocessing import Queue,Processdef f(q):    q.put("alex")if __name__ == '__main__':    q = Queue()    p = Process(target=f, args=(q,))    p.start()    p.join()    print(q.get())  # alex

 

2.使用multiprocessing模块的Pipe实现数据传递

'''进程间通讯:管道,用法类似于socket一次send对应一次recv,如果对应次数不对会出现阻塞'''from multiprocessing import Processfrom multiprocessing import Pipedef f(conn):    conn.send([42,None,'hello'])    print(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('hello world')    p.join()'''[42, None, 'hello']hello world'''

 

3.使用multiprocessing模块的Manager实现数据共享

'''两个进程怎么同时修改一份数据?即数据的共享,需要用到manager其实是copy了几份,再合并。manager支持的类型有:list, dict, Namespace, Lock, RLock, Semaphore, BoundedSemaphore, Condition, Event, Barrier, Queue, Value and Array.manager是自动加锁的'''from multiprocessing import Manager,Processimport osdef 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(range(5)) # 列表...        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)'''[0, 1, 2, 3, 4, 3088][0, 1, 2, 3, 4, 3088, 7092][0, 1, 2, 3, 4, 3088, 7092, 5256][0, 1, 2, 3, 4, 3088, 7092, 5256, 6460][0, 1, 2, 3, 4, 3088, 7092, 5256, 6460, 6696][0, 1, 2, 3, 4, 3088, 7092, 5256, 6460, 6696, 6796][0, 1, 2, 3, 4, 3088, 7092, 5256, 6460, 6696, 6796, 6640][0, 1, 2, 3, 4, 3088, 7092, 5256, 6460, 6696, 6796, 6640, 6296][0, 1, 2, 3, 4, 3088, 7092, 5256, 6460, 6696, 6796, 6640, 6296, 5308][0, 1, 2, 3, 4, 3088, 7092, 5256, 6460, 6696, 6796, 6640, 6296, 5308, 6704]{3088: 3088, 7092: 7092, 5256: 5256, 6460: 6460, 6696: 6696, 6796: 6796, 6640: 6640, 6296: 6296, 5308: 5308, 6704: 6704}[0, 1, 2, 3, 4, 3088, 7092, 5256, 6460, 6696, 6796, 6640, 6296, 5308, 6704]'''

 

posted on
2018-09-23 16:45 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/staff/p/9693097.html

你可能感兴趣的文章
(八)java运算符
查看>>
项目第一天
查看>>
Web前端面试题目及答案汇总
查看>>
【windows】如何获取文件夹目录
查看>>
python3 time模块的引用
查看>>
java代码---------打印正三角形
查看>>
git(5) windows下 pycharm + git(github) ,在本地方便管理
查看>>
泛型集合
查看>>
react + redux 完整的项目,同时写一下个人感悟
查看>>
vue开发移动端总结
查看>>
JMeter添加压力机、下载文件
查看>>
c# 字符串加密解密
查看>>
20155301 信息安全系统设计基础第五次实验
查看>>
09-Python字典的基础
查看>>
linux 下简单的ftp客户端程序
查看>>
ASP.NET MVC3 Model验证总结
查看>>
自定义全局样式
查看>>
08 常见事件响应的实现方式对比
查看>>
php 验证邮箱的方法
查看>>
RCNN,Fast RCNN,Faster RCNN 的前生今世:(2)R-CNN
查看>>