Python 进程操作之进程间通过队列共享数据,队列Queue简单示例

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和消息两部分,打印到控制台上。

这个示例向我们展示了如何在队列中将多个值打包在一起,以及如何在消费者中解包。这样可以大大提高队列操作的灵活性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python 进程操作之进程间通过队列共享数据,队列Queue简单示例 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Python字符串格式化的方法(两种)

    Python字符串格式化是指在字符串中插入变量或者数据时,通过特定的语法规则进行格式化输出的过程。Python提供了两种字符串格式化的方法,分别是%运算符格式化和format方法格式化。 1. %运算符格式化 %运算符格式化的语法是,在字符串中使用%作为占位符,然后在字符串后面跟上%运算符,再跟上需要格式化输出的变量或者数据。%运算符的占位符有以下几种: %…

    python 2023年6月5日
    00
  • python中list列表的高级函数

    以下是详细讲解“Python中List列表的高级函数”的完整攻略。 在Python中,列表是一种常用的数据类型,提供了许多高级函数来操作列表。本文将介绍Python中List列表的高级函数,并提供两个示例说明。 高级函数 1. map() map()函数用于对列表中的每个元素应用一个函数,并返回一个新的列表。例如: lst = [1, 2, 3, 4] ne…

    python 2023年5月13日
    00
  • 浅谈python中的正则表达式(re模块)

    浅谈Python中的正则表达式(re模块) 正则表达式是一种强大的文本处理工具,它可以用来匹配、查找、替换文本中的特定模式。在Python中,我们可以使用re模块来实现正则表达式的相关操作。本文将为您详细讲解Python中的正则表达式,包括正则表达的基本语法、re模块的常用函数、以及两个示例说明。 正则表达式的基本语法 正则表式是由一些特殊字符和普通字符组成…

    python 2023年5月14日
    00
  • 详解Python PIL ImageOps.fit()方法

    Python PIL库提供了许多图像处理方法,其中PIL.ImageOps模块的fit()方法可以在保持纵横比的同时裁剪图像或缩放图像,接下来我们将详细讲解该方法的使用。 方法概述 PIL.ImageOps.fit()方法的语法如下: PIL.ImageOps.fit(image, size, method=3, bleed=0.0, centering=(…

    python-answer 2023年3月25日
    00
  • 深入解析Python中的上下文管理器

    深入解析Python中的上下文管理器 在Python中,上下文管理器是一种用于管理资源的对象。它们可以确保在使用后正确地释放它们,从而避免资源泄漏。本文将为您提供一个深入解析Python中的上下文管理器的整攻略,并提供两个示例说明。 1. 上下文管理器的基本用法 上下文管理器是一个对象,它定义了两个方法:__enter__和__exit__。当进入上下文时,…

    python 2023年5月14日
    00
  • python基于三阶贝塞尔曲线的数据平滑算法

    Python基于三阶贝塞尔曲线的数据平滑算法 数据平滑是一种常见的数据处理技术,可以用于去除数据中的噪声和异常值,使数据更加平滑和可靠。在Python中,可以使用三阶贝塞尔曲线实现数据平滑算法。本文将详细讲解实现基于三阶贝塞尔曲线的数据平滑算法的整个攻略,包括算法原理、实现过程和示例。 算法原理 三阶贝塞尔曲线是一种常见的曲线拟合方法,可以用于平滑数据。在三…

    python 2023年5月14日
    00
  • Python实现查找匹配项作处理后再替换回去的方法

    Python实现查找匹配项作处理后再替换回去的方法,一般可以利用正则表达式(Regular Expression)的相关内容实现。下面将详细讲解实现该方法的完整攻略。 步骤一:导入re模块 在使用Python实现正则表达式相关功能之前,需要先导入Python的re模块: import re 步骤二:定义正则表达式 根据需求,我们需要定义一个正则表达式来匹配目…

    python 2023年6月3日
    00
  • 通过python爬虫mechanize库爬取本机ip地址的方法

    通过Python爬虫Mechanize库爬取本机IP地址的方法 本攻略将介绍如何使用Python爬虫Mechanize库爬取本机IP地址。Mechanize库是一个模拟浏览器行为的Python库,可以用于模拟用户在网站上的操作。以下是一个示例代码,演示如何使用Mechanize库爬取本机IP地址: import mechanize # 创建浏览器对象 bro…

    python 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部