Queue和Pipe进程间通信的实现方式
发布时间:2021-05-28 15:15:20 所属栏目:语言 来源:互联网
导读:前面讲解了使用 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,"取数据:") (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |