欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > python >内容正文

python

python实现进程通信_python进程间的通讯实现

发布时间:2025/3/12 python 39 豆豆
生活随笔 收集整理的这篇文章主要介绍了 python实现进程通信_python进程间的通讯实现 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

1:进程间通讯的方法:apply_async()非阻塞式通讯     apply()阻塞式通讯

2:使用Queue实现对Process创建的进程间通讯,

Queue本身是一个消息队列程序,Queue常用方法:

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

Queue.empty():如果队列为空,返回true 否则返回false

Queue.full():如果队列满了,返回true,否则false

Queue.get():获取队列中的一条消息,然后将其从队列中移除

Queue.put(“xxx”):把内容存放进消息队列

Queue.get_nowait()相当于Queue.get(False) Queue.put_nowait()相当于Queue.put(False)

例子:

#叫做队列

from multiprocessing import Queue

from multiprocessing import Process

list = ["lipeng","王五","赵四"]

def write(q):

for temp in list:

print("---%s write to queue"%temp)

q.put(temp)

def read(q):

while 1:

if not q.empty():

value = q.get()

print("--get %s from queue"%value)

else:

print("queue is empty")

break

if __name__ == '__main__':

q = Queue()

pw = Process(target=write,args=(q,))

pr = Process(target=read,args=(q,))

pw.start()#启动子进程,开始写

pw.join()#等待pw进程结束

pr.start()

pr.join()

程序输出:

3: 进程池间通讯方式的实现

Process创建的进程可以使用Queue进行通讯,而进程池Pool创建的进程通讯使用Manager中的Queue来初始化,就不需要再导入Queue模块。

先看例子:

​​from multiprocessing import Pool,Manager

#from multiprocessing import Queue

def write(q):#定义写入队列的函数

list = ["111", "222", "555", "666"]

if not q.full():

for temp in list:

print("write %s to Queue"%temp)

q.put(temp)

else:

print("queue is full")

def read(q):

while True:

if not q.empty():

value = q.get()

print("get %s from queue"%value)

else:

print("queue ir empty")

print("所有数据读写完毕")

break

if __name__ == '__main__':

#创建队列

q = Manager().Queue()#使用Manager中的Queue来初始化

#创建写进程

po = Pool()

#使用阻塞模式创建进程,这样就不需要在read中使用死循环,可以让write执行完成后再用read进程

po.apply(write,(q,))

po.apply(read,(q,))

po.close()

po.join()

程序输出如下:

很累很累,但我还是要解释一下这个代码:

首先导入mutiprocessing模块下的Process类Manager类,定义write函数实现把数据写入队列,定义read函数实现对队列中的消息进行读取。

在write函数中以队列q(使用Manager中的Queue来初始化),判断队列是否满,遍历要写入的数据使用put方法写入。否则输出队列已满

在read函数中以队列q(使用Manager中的Queue来初始化),判断队列时候是空,使用get方法和遍历队列获取每一个队列中的值并输出。

在程序入口处先创建队列,声明进程池,在选择使用阻塞式模式创建进程,最后关闭子进程,结束父进程。

总结

以上是生活随笔为你收集整理的python实现进程通信_python进程间的通讯实现的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。