"""
IPC 指的是进程间通讯
之所以开启子进程 肯定需要它帮我们完成任务 很多情况下 需要将数据返回给父进程
然而 进程内存是物理隔离的
解决方案:
1.将共享数据放到文件中 就是慢
2.管道 subprocess中的那个 管道只能单向通讯 必须存在父子关系
3.共享一块内存区域 得操作系统帮你分配 速度快 """ from multiprocessing import Process,Manager
import time def task(dic):
print("子进程xxxxx")
# li[0] = 1
# print(li[0])
dic["name"] = "xx" if __name__ == '__main__':
m = Manager()
# li = m.list([100])
dic = m.dict({})
# 开启子进程
p = Process(target=task,args=(dic,))
p.start()
time.sleep(3)
print(dic)
结果:
子进程xxxxx
{'name': 'xx'}
"""
进程间通讯的另一种方式 使用queue
queue 队列
队列的特点:
先进的先出
后进后出
就像扶梯
"""
from multiprocessing import Process,Queue # 基础操作 必须要掌握的
# 创建一个队列
# q = Queue()
# # 存入数据

# q.put("hello")
# q.put(["1","2","3"])
# q.put(1)
# # 取出数据
# print(q.get())
# print(q.get())
# print(q.get())
# print(q.get()) # 阻塞操作 必须掌握
# q = Queue(3)
# # # 存入数据
# q.put("hello",block=False)
# q.put(["1","2","3"],block=False)
# q.put(1,block=False)
# # 当容量满的时候 再执行put 默认会阻塞直到执行力了get为止
# # 如果修改block=False 直接报错 因为没地方放了
# # q.put({},block=False)
#
# # # # 取出数据
# print(q.get(block=False))
# print(q.get(block=False))
# print(q.get(block=False))
# # 对于get 当队列中中没有数据时默认是阻塞的 直达执行了put
# # 如果修改block=False 直接报错 因为没数据可取了
# print(q.get(block=False)) # 了解
q = Queue(3)
q.put("q",timeout=3)
q.put("q2",timeout=3)
q.put("q3",timeout=3)
# 如果满了 愿意等3秒 如果3秒后还存不进去 就炸
# q.put("q4",timeout=3) print(q.get(timeout=3))
print(q.get(timeout=3))
print(q.get(timeout=3))
# 如果没了 愿意等3秒 如果3秒后还取不到数据 就炸
print(q.get(timeout=3)) #引发错误行
结果:
q
q2
q3
Traceback (most recent call last):
File "F:/oldboy课程记录/day36/代码/6.进程间通讯2.py", line 59, in <module>
print(q.get(timeout=3))
File "F:\Python\lib\multiprocessing\queues.py", line 105, in get
raise Empty
queue.Empty

最新文章

  1. 用node-webkit(NW.js)创建桌面程序
  2. CSS基础(四):盒模型
  3. (easy)LeetCode 205.Reverse Linked List
  4. window.location.href/replace/reload()--页面跳转+替换+刷新
  5. js版九宫格拼图与启发式搜索(A*算法)
  6. 个渣渣C语言之数组
  7. django----Form详细信息
  8. [转]Hadoop家族学习路线图
  9. 通过docker-compose构建ghost博客(一)
  10. 利用Linux文件系统内存cache来提高性能
  11. Lua------------------unity关于lua的使用
  12. php mongodb manager 查数据的各种姿势
  13. discrete
  14. 2018.10.01 NOIP模拟 卡牌游戏(贪心)
  15. ## 20145203盖泽双 《Java程序设计》第二周学习总结
  16. hadoop--hive数据仓库
  17. UITableViewCell状态切换效果
  18. 360全景图three.js
  19. 软工网络15团队作业4-DAY5
  20. dorado事件

热门文章

  1. oracle表空间不足,ORA-00604的解决方法
  2. Success Rate CodeForces - 807C (数学+二分)
  3. java得到日期相减的天数
  4. java中流的简单小结
  5. .net之httphandler小记
  6. 福州大学软件工程1816 | W班 第2次作业成绩排名
  7. MyEclipse 配置 Tomcat
  8. 1 Servlet 简介
  9. Thread(生产者和消费者) wait、notify、notifyAll
  10. bnu——GCD SUM (莫比乌斯反演)