进程与线程的通信机制----Queue
进程运行时候变量是隔离的,线程间共享全局变量。
进程:
- from multiprocessing import Process
- from threading import Thread
- def get(lis):
- while len(lis) != 0: # 注意一定要加上判定条件,不然进程不会退出的。
- s = lis.pop()
- print('get %s', s)
- if __name__ == '__main__':
- lis = list(range(1, 11))
- process1 = Process(target=get, args=(lis,))
- process2 = Process(target=get, args=(lis,))
- process1.start()
- process2.start()
- process1.join()
- get %s 10
- get %s 10
- get %s 9
- get %s 9
- get %s 8
- get %s 8
- get %s 7
- get %s 7
- get %s 6
- get %s 6
- get %s 5
- get %s 4
- get %s 5
- get %s 3
- get %s 4
- get %s 2
- get %s 3
- get %s 1
- get %s 2
- get %s 1
线程:
- from multiprocessing import Process
- from threading import Thread
- def get(lis):
- while len(lis) !=0: # 注意一定要加判定条件,不然线程不会会一直等待,不会退出的。
- s = lis.pop()
- print('get %s', s)
- if __name__ == '__main__':
- lis = list(range(1, 11))
- thread1 = Thread(target=get, args=(lis,))
- thread2 = Thread(target=get, args=(lis,))
- thread1.start()
- thread2.start()
- thread1.join()
- thread2.join()
- print('finished')
- get %s 10
- get %s 9
- get %s 8
- get %s 7
- get %s 6
- get %s 5
- get %s 4
- get %s 3
- get %s 2
- get %s 1
- finished
进程与线程的Queue
- 线程用的消息队列
from queue import Queue
- 进程用的消息队列
from multiprocessing import Queue
- 进程池用的消息队列(不能用from multiprocessing import Queue)
from multiprocessing import Manager
queue = Manager().Queue()
- 特殊的,只用于两个进程间的通信Pipe(性能高于Queue,如果只有两个进程推荐使用)
from multiprocessing import Pipe
- 其它进程间的共享内存操作,列表、字典或其它python对象。
from multiprocessing import manager
manager = manager()
my_list = manager.list() / my_dict = manager.dict()/
在使用Queue的时候,如果使用的默认的get后者put方法,(即(block=True, timeout=None))不管是多线程,还是多进程,在从队列中取出url的时候一定要加上判定条件,while queue.qsize()!=0 或者 while not queue.empty(),不然进程或者线程会一直等待。
- from multiprocessing import Process, Pipe
- def producer(queue):
- queue.send('bobby')
- def comsumer(queue):
- print(queue.recv())
- if __name__ == '__main__':
- recv_pipe, send_pipe = Pipe() 注意创建时候必须同时创建两个对象一个用于发送一个用于取出。
- my_producer = Process(target=producer, args=(send_pipe,))
- my_comsumer = Process(target=comsumer, args=(recv_pipe,))
- my_producer.start()
- my_comsumer.start()
- my_producer.join()
- my_comsumer.join()
- 输出:
- bobby
进程与线程的通信机制----Queue的更多相关文章
- Android线程间通信机制——深入理解 Looper、Handler、Message
在Android中,经常使用Handler来实现线程间通信,必然要理解Looper , Handler , Message和MessageQueue的使用和原理,下面说一下Looper , Handl ...
- Python并发编程之线程消息通信机制任务协调(四)
大家好,并发编程 进入第四篇. 本文目录 前言 Event事件 Condition Queue队列 总结 . 前言 前面我已经向大家介绍了,如何使用创建线程,启动线程.相信大家都会有这样一个想法,线程 ...
- 进程间通信机制(管道、信号、共享内存/信号量/消息队列)、线程间通信机制(互斥锁、条件变量、posix匿名信号量)
注:本分类下文章大多整理自<深入分析linux内核源代码>一书,另有参考其他一些资料如<linux内核完全剖析>.<linux c 编程一站式学习>等,只是为了更好 ...
- 三种进程和线程数据共享模块方法Queue》Pipe》manager
>>>>线程中的queue import threading import queue def f(qq): print("in child",qq.qsi ...
- 线程间通信:Queue
线程间使用队列来互相交换数据,数据可以是字符串 .列表 .元组等,Queue 是提供队列操作的模块,常见的队列如下: FIFO:First In First Out 先进先出队列,也就是最先放进去的数 ...
- JAVA多线程提高二:传统线程的互斥与同步&传统线程通信机制
本文主要是回顾线程之间互斥和同步,以及线程之间通信,在最开始没有juc并发包情况下,如何实现的,也就是我们传统的方式如何来实现的,回顾知识是为了后面的提高作准备. 一.线程的互斥 为什么会有线程的互斥 ...
- Android 进程和线程模型
Android进程模型 在安装Android应用程序的时候,Android会为每个程序分配一个Linux用户ID,并设置相应的权限,这样其它应用程序就不能访问此应用程序所拥有的数据和资源了. 在 Li ...
- Android线程间异步通信机制源码分析
本文首先从整体架构分析了Android整个线程间消息传递机制,然后从源码角度介绍了各个组件的作用和完成的任务.文中并未对基础概念进行介绍,关于threadLacal和垃圾回收等等机制请自行研究. 基础 ...
- Java——线程间通信
body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...
随机推荐
- Java8之Optional类
写在前头 今天再看阿里的Java开发手册,里面异常处理第10条提到这样一个建议. [推荐]防止 NPE ,是程序员的基本修养,注意 NPE 产生的场景:1 ) 返回类型为基本数据类型,return 包 ...
- WPF 窗口大小自适应
在设置桌面不同分辨率以及较大DPI下,窗口如何显示的问题. 方案一 设置窗口最大值和最小值显示 通过对比当前屏幕的可显示区域,将窗口高宽最大值和最小值,设置为窗口的实际高宽(此例中仅设置高度) 界面设 ...
- PostGIS计算矢量切片(一)--渲染数据
没写错,是使用postgis计算出来矢量切片.在这之前先准备一个数据:一个GIS数据表(本例中数据为一百万的点数据,坐标:4326),并在表中添加x,y字段,方便后面的数据筛选.sql中用到了 ...
- docker 学习资料收集
Docker中文网 http://www.docker.org.cn/book/ docker镜像怎么迁移到其他的服务器 http://www.talkwithtrend.com/Question/1 ...
- Android为TV端助力 UDP协议
废话不多说.直接上代码! 一. 接收端 1.创建UDP连接 public void init() { try { //开关的作用 isRunning = true; DatagramSocket mU ...
- C# 类如何声明索引器以提供对类的类似数组的访问的代码
研发期间,将内容过程中比较常用的内容段做个收藏,如下内容内容是关于 C# 类如何声明索引器以提供对类的类似数组的访问.的内容,希望能对各位有用处. using System;using System. ...
- Android人脸识别App(带web上传注册信息)
人脸识别+本机Web后端人脸sdk采用虹软sdk,本机web采用AndServer:上传姓名+人脸图片即可实现注册源码地址:https://github.com/joetang1989/ArcFace ...
- <5>Python的uwsgi web服务器
一.是什么? uWSGI是web服务器,用来部署线上web应用到生产环境.uWSGI实现了WSGI协议.uwsgi协议.http协议.WSGI(Web Server Gateway Interface ...
- 理解ECS的概念和Unity中的ECS设计
组合优于继承 ecs的概念很早就有了,最初的主要目的应该还是为了改善设计. e-c-s三者都有其意义,e-c是组合优于继承,主要用以改善oo的继承耦合过重以及多继承菱形问题. oop常见设计里,每个g ...
- macos 远程 windows 10
使用的工具:Parallels Client 免费,可以从windows store 免费下载: 只有这个最好用,希望能帮到你.和原生的windows 远程桌面功能很像: