Python进行进程间通信的方法

  介绍

这篇文章将为大家详细讲解有Python关进行进程间通信的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

<强> 1。队列的使用

可以使用多处理模块的队列实现多进程之间的数据传递,队列本身是一个消息列队程序,首先用一个小实例来演示一下队列的工作原理:

# - *安康;编码:utf-8  - * -   得到multiprocessing  import 队列   #创建一个队列对象,最多可接受三条把消息   时间=q 队列(3),   q.put(“消息1“)   q.put(“消息2“)   print (q.full ())   q.put(“消息3“)   print (q.full ())   试一试:   ,,,q.put(“消息4“,真的,2)   except :   ,,,print(“消息队列已满,现有消息数量:% s" % q.qsize ())   试一试:   ,,,q.put_nowait(“消息5“)   except :   ,,,print(“消息队列已满,现有消息数量:% s" % q.qsize ())   #推荐方式,先判断消息队列是否已满,在写入   if  not  q.full ():   ,,,q.put_nowait(“消息6“)   #读取消息时,先判断消息队列是否为空,在读取   if  not  q.empty ():   ,,,for 小姐:拷贝范围(q.qsize ()):   ,,,,,,,印刷(q.get_nowait ())

运行结果为:

假   真正的   消息队列已满,现有消息数量:3   消息队列已满,现有消息数量:3   消息1   消息2   消息3

<强>说明

初始化队列()对象时(例如:q=队列()),若括号中没有指定最大可接收的消息数量,或数量为负的值,那么就代表可接受的消息数量没有上限(直到内存的尽头),

Queue.qsize():返回当前队列包含的消息数量;

Queue.empty():如果队列为空,返回真,反之假;

Queue.full():如果队列满了,返回真,反之假;

队列。得到([块[,超时]]):获取队列中的一条消息,然后将其从列队中移除,块默认值为真;

1)如果块使用默认值,且没有设置超时(单位秒),消息列队如果为空,此时程序将被阻塞(停在读取状态),直到从消息列队读到消息为止,如果设置了超时,则会等待超时秒,若还没读取到任何消息,则抛出“Queue.Empty"异常;

2)如果块值为False,消息列队如果为空,则会立刻抛出“Queue.Empty"异常;

Queue.get_nowait():相当Queue.get(假);

队列。put(项目,(块[,超时]]):将项消息写入队列,块默认值为真;

1)如果块使用默认值,且没有设置超时(单位秒),消息列队如果已经没有空间可写入,此时程序将被阻塞(停在写入状态),直到从消息列队腾出空间为止,如果设置了超时,则会等待超时秒,若还没空间,则抛出“Queue.Full"异常;

2)如果块值为False,消息列队如果没有空间可写入,则会立刻抛出“Queue.Full"异常;

Queue.put_nowait(项):相当队列。把(项目、虚假);

<强> 2。队列实例

我们以队列为例,在父进程中创建两个子进程,一个往队列里写数据,一个从队列里读数据:

得到multiprocessing  import 过程   得到multiprocessing  import 队列   import 操作系统   import 时间   import 随机   #写数据进程执行的代码   def 写(问):   ,,,for  value 拷贝(“A",“B",“C"):   ,,,,,,,印刷(“Put  % s 用Queue “%值)   ,,,,,,,q.put(值)   ,,,,,,,time . sleep (random.random ())   ,,   #读取数据进程的代码,,,   def 阅读(问):   ,,,while 正确的:   ,,,,,,,if  not  q.empty ():   ,,,,,,,,,,,value =, q.get(真正的)   ,,,,,,,,,,,印刷(“Get  % s 得到Queue “%值)   ,,,,,,,,,,,time . sleep (random.random ())   ,,,,,,,其他的:   ,,,,,,,,,,,休息   if  __name__ ==, & # 39; __main__ # 39;:   ,,,#父进程创建队列,并传递给各个子进程   ,,,q =,队列()   ,,,pw =,过程(=target 写,args=(q))   ,,,pr =,过程(=target 阅读,args=(q))   ,,,#启动子进程pw,写入   ,,,pw.start ()   ,,,#等待pw结束   ,,,pw.join ()   ,,,#启动子进程公关,读取   ,,,pr.start ()   ,,,pr.join ()   ,,,print(“所有数据都写入并且读完“)

运行结果为:

Put  A 用Queue    Put  B 用Queue    Put  C 用Queue    得到Queue 获Get  A ;   得到Queue 获Get  B ;   Get  C 得到队列

Python进行进程间通信的方法