Python 进程操作之进程间通过队列共享数据,队列Queue简单示例
什么是Queue
Python中的Queue模块提供了多种多样的队列实现。队列类对象的主要操作包括 put、get、qsize和empty等。为了实现进程之间的同步,Queue模块提供了一个Queue的类。
Queue类是一个同步队列,用于在python多线程编程时在多个线程之间传递任务。它特别适用于一些生产者-消费者场景。
Queue.put(item[, block[, timeout]])
将 item 放入队列中。参数 block 默认值为 True。如果block使用默认值,且没有设置timeout(单位秒),则在队列有空间之前程序将暂停。
Queue.get([block[, timeout]])
移除并返回队列头部的一个元素。参数 block 和timeout 的含义与put() 方法的一样。
队列共享数据示例
在这个示例中,我们将创建两个进程来往一个队列中发送消息,在进程之间共享队列数据。
from multiprocessing import Process, Queue
def producer(q):
for i in range(10):
q.put(i)
def consumer(q):
while not q.empty():
item = q.get()
print(item)
def main():
q = Queue()
producer_p = Process(target=producer, args=(q,))
consumer_p = Process(target=consumer, args=(q,))
producer_p.start()
consumer_p.start()
producer_p.join()
consumer_p.join()
if __name__ == '__main__':
main()
在上述代码中,我们使用了multiprocessing.Queue
模块创建了一个队列,然后创建了两个进程,分别作为生产者和消费者,往队列中添加和获取数据。
改进的队列共享数据示例
再来看一个例子,这个例子中,我们将消息和使用该消息的进程的PID一起发送到队列中。消费者取出队列数据后,将消息和PID打印到控制台上。
import os
from multiprocessing import Process, Queue
def producer(q):
for i in range(10):
pid = os.getpid()
message = f"Message:{i} from process:{pid}"
q.put((pid, message))
def consumer(q):
while not q.empty():
pid, data = q.get()
print(f"Process {pid} get message: {data}")
def main():
q = Queue()
producer_p = Process(target=producer, args=(q,))
consumer_p = Process(target=consumer, args=(q,))
producer_p.start()
consumer_p.start()
producer_p.join()
consumer_p.join()
if __name__ == '__main__':
main()
在这个示例中,我们先获取了当前进程的PID,然后将消息和PID一同打包成一个元组,放到队列中。在消费者中,我们先从队列中取出元组,然后将元组分成PID和消息两部分,打印到控制台上。
这个示例向我们展示了如何在队列中将多个值打包在一起,以及如何在消费者中解包。这样可以大大提高队列操作的灵活性。
本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!