这篇文章将为大家详细讲解有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进行进程间通信的方法