首页 > 系统相关 >多进程与多线程 python

多进程与多线程 python

时间:2022-10-29 00:44:58浏览次数:66  
标签:__ python Queue 队列 timeout 进程 多线程 blocked

进程之间的数据传递

全局变量在多个进程中不共享,进程之间的数据是独立的,默认情况下互不影响

用 Queue 实现多进程之间的数据传递

Queue 是多进程安全的队列,可以使用 Queue 实现多进程之间的数据传递。

from multiprocessing import Queue

put 方法用以插入数据到队列中, put 方法还有两个可选参数: blocked 和 timeout。如果 blocked 为 True(默认值),并且 timeout 为正值,该方法会阻塞 timeout 指定的时间,直到该队列有剩余的空间。如果超时,会抛出 Queue.full 异常。如果 blocked 为 False,但该 Queue 已满,会立即抛出 Queue.full 异常

get 方法可以从队列读取并且删除一个元素。同样, get 方法有两个可选参数: blocked和 timeout。如果 blocked 为 True(默认值),并且 timeout 为正值,那么在等待时间内没有取到任何元素,会抛出 Queue.Empty 异常。如果 blocked 为 False,有两种情况存在,如果Queue 有一个值可用,则立即返回该值,否则,如果队列为空,则立即抛出Queue.Empty 异常

另,如果使用 Pool 创建进程,就需要使用 multiprocessing.Manager()中的 Queue()来完成进程间的通信,而不是 multiprocessing.Queue(),否则会抛出异常

from multiprocessing import Manager,Pool
import time
 
def write(q):
	#将列表中的元素写入队列中
	for i in ["a","b","c"]:
		print('开始写入值%s' % i)
		q.put(i)
		time.sleep(1)
 
#读取
def read(q):
	print('开始读取')
	while True:
		if not q.empty():
			print('读取到:',q.get())
			time.sleep(1)
		else:
			break
 
if __name__=='__main__':
	#创建队列
	q=Manager().Queue()
	#创建进程池
	p=Pool(3)
	#使用apply阻塞模式创建进程
	p.apply(write,(q,))
	p.apply(read,(q,))
	p.close()
	p.join()

但apply_async其实可以返回参数
另,我使用的时候是自定义的Process,可以传到self.q中使用。

标签:__,python,Queue,队列,timeout,进程,多线程,blocked
From: https://www.cnblogs.com/win-dy/p/16837921.html

相关文章

  • 【操作系统-进程】PV操作——吸烟者问题
    目录吸烟者问题解题步骤Step1.有几类进程Step2.用中文描述动作Step3.添加PV操作,用中文描述里面的操作Step4.检查是否出现死锁Step5.定义信号量网上的代码(与王......
  • [python] Python制作自动填写脚本,100%准确率
    本次案例代码实现思路:打开考试网站selenium-->浏览器驱动-->操作浏览器<模拟人的行为做操作浏览器>获取答案获取答案网站链接获取问题以及答案内容对比题目以......
  • 多线程
    学习文档:https://www.cnblogs.com/gh110/p/15153666.html学习视频:https://www.bilibili.com/video/BV1V4411p7EF/ 1.线程创建(三种方法)1.1继承Thread类(重要)a.自定......
  • python第一次课
    Python学习第一次学习引用第一次写博客没什么好分享的,把我学习python的心得分享出来;一是可以让新入IT行业的同学有一个好的榜样,二是不会写博客的程序员不是一个好的程......
  • python列表套字典去重
    最近在写工具,拿到数据,发现有重复的,想到用set去重,结果报错了,哈哈,重新学习下#例子:data_list=[{'id':1,'name':'user01'},{'id':2,'name':'user02'},{'id':1,'name':'......
  • Python 基础语法
    一、字面量字面量:在代码中,被写下来的固定的值,称之为字面量数字(Number)字符串(String)列表(List):有序的可变序列元祖(Tuple):有序的不可变序列集合(Set):无序不重复集合字典(Dic......
  • 【基础知识】为python部署第三方库(设备可联网版)
    “大家好哇!继上次我们说完怎么安装python之后,这一次给大家分享一下怎么根据自己的需求来部署所需要的库,如numpy库等。”01安装第三方库众所周知,在python下面有很多库,可......
  • 【python】装饰器参数
    装饰器是AOP编程思想,给主体函数增加功能,又不让代码入侵到主体函数中,实现高内聚,低耦合。参数有两种,一种是功能函数带参数、另外一种是装饰器函数带参数,如果装饰功能部分代......
  • 【基础知识】为python部署第三方库(设备不可联网版)
    “大家好哇!继上次我们说完怎么安装python之后,这一次给大家分享一下怎么根据自己的需求来部署所需要的库,如numpy库等。”01安装第三方库我们在前面已经说过了当设备可以......
  • Python time.strptime()方法
    time.strptime()函数根据指定的格式把一个时间字符串解析为时间元组。importtimefromdatetimeimportdatetimeresult=time.strptime("1.2022-12-1010:45:00","......