加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

Queue和Pipe进程间通信的实现方式

发布时间:2021-05-29 12:27:53 所属栏目:编程 来源:互联网
导读:前面讲授了行使 Queue 模块中的 Queue 类实现线程间通讯,但要实现历程间通讯,必要行使 multiprocessing 模块中的 Queue 类。 简朴的领略 Queue 实现历程间通讯
前面讲授了行使 Queue 模块中的 Queue 类实现线程间通讯,但要实现历程间通讯,必要行使 multiprocessing 模块中的 Queue 类。

简朴的领略 Queue 实现历程间通讯的方法,就是行使了操纵体系给开发的一个行列空间,各个历程可以把数据放到该行列中,虽然也可以从行列中把本身必要的信息取走。

Queue 类提供了诸多实现历程间通讯的要领,表 1 摆列了常用的一些要领。

表 1 Python multiprocessing Queue 类常用要领 要领名 成果
put( obj[ ,block=True [ ,timeout=None ] ] )   将 obj 放入行列,个中当 block 参数设为 True 时,一旦行列被写满,则代码就会被阻塞,直到有历程取走数据并腾出空间供 obj 行使。timeout 参数用来配置阻塞的时刻,即措施最多在阻塞 timeout 秒之后,假如照旧没有空闲空间,则措施会抛出 queue.Full 非常。  
put_nowait(obj)   该要领的成果等同于 put(obj, False)。  
get([block=True , [timeout=None] ])   从行列中取数据并返回,当 block 为 True 且 timeout 为 None 时,该要了解阻塞当前历程,直到行列中有可用的数据。假如 block 设为 False,则历程会直接做取数据的操纵,假如取数据失败,则抛出 queue.Empty 非常(这种气象下 timeout 参数将不起浸染)。假如手动 timeout 秒数,则当前历程最多被阻塞 timeout 秒,假如到时仍旧没有可用的数据取出,则会抛出 queue.Empty 非常。  
get_nowait()   该要领的成果等同于 get(False)。  
empty()   判定当前行列空间是否为空,假如为空,则该要领返回 True;反之,返回 False。  

下面措施演示了怎样行使 Queue 类实现多历程之间的通讯。

import multiprocessing

 

def processFun(queue,name):

print(multiprocessing.current_process().pid,"历程放数据:",name)

#将 name 放入行列

queue.put(name)

if __name__ == '__main__':

# 建设历程通讯的Queue

queue = multiprocessing.Queue()

# 建设子历程

process = multiprocessing.Process(target=processFun, args=(queue,""))

# 启动子历程

process.start()

#该子历程必需先执行完毕

process.join()

print(multiprocessing.current_process().pid,"取数据:")

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读