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

yizhihongxing

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日

相关文章

  • 超级好用的4个Python命令行可视化库

    下面是关于“超级好用的4个Python命令行可视化库”的完整攻略。 简介 命令行可视化是指在终端中使用图形或者其他方式将数据可视化。在Python中,有很多开源工具可以用于命令行可视化。下面介绍了4个超级好用的Python命令行可视化库,每个库都提供了不同的绘图类型和样式,可根据需求选择合适的库进行使用。 这4个库分别是: curses:一个Python内置…

    python 2023年5月18日
    00
  • 详解Python中的相对导入和绝对导入

    详解Python中的相对导入和绝对导入 在Python中,导入模块是非常常见的操作。在导入模块时,可以使用相对导入或绝对导入。 相对导入 相对导入是指从当前模块的位置出发,按照相对路径导入模块。相对导入使用点号(.)和双点号(..)表示相对路径。 假设目录结构如下: . ├── main.py └── package ├── module1.py ├── m…

    python 2023年6月3日
    00
  • 从零开始搭建基于Python的微信小程序的教程分享

    搭建基于Python的微信小程序教程分享 背景 微信小程序已经成为移动应用的新趋势,而Python作为当前最流行的编程语言之一,一定程度上可以帮助开发人员更好地实现微信小程序的开发需求。本文旨在为想要通过Python打造自己的小程序的开发者提供一个指南。 准备工作 在开始搭建Python微信小程序前,需要准备以下的工具和环境: 微信小程序开发者工具 Pyth…

    python 2023年5月23日
    00
  • python模块和函数帮助文档快速查看方法示例

    要快速查看Python模块和函数的帮助文档,我们可以使用Python内置的help()函数或更加便捷的文档工具——PyDoc。下面是使用这两种方法查看帮助文档的完整攻略: 使用help()函数 help()函数是Python内置的一个函数,可以输出对象的帮助信息。使用时,只需要将要查看帮助文档的对象(模块、函数、类、方法等)作为参数传递给help()函数即可…

    python 2023年6月3日
    00
  • Python实现登录人人网并抓取新鲜事的方法

    Python实现登录人人网并抓取新鲜事的方法可以分为以下几个步骤: 1.导入requests和BeautifulSoup模块 import requests from bs4 import BeautifulSoup 2.获取登录页面信息,分析登录页面的HTML结构并提取需要post的数据 login_url = ‘http://www.renren.com…

    python 2023年6月3日
    00
  • ROS Python msg,发送整数列表

    【问题标题】:ROS Python msg, send list of intsROS Python msg,发送整数列表 【发布时间】:2023-04-05 10:00:01 【问题描述】: 我有一个整数列表: perc = [0, 70, 85, 13, 54, 60, 67, 26] 我想把它发送到另一个 ROS 节点。我有以下 .msg 文件: #F…

    Python开发 2023年4月5日
    00
  • Python enumerate()计数器简化循环

    Python中内置的enumerate()函数是一种使用循环时常用的工具。这个函数生成一个序列,将元素位置和元素值组成的元组以(key,value)的形式返回。通常,我们用于for循环中,通过循环计数器遍历整个序列。 下面是使用enumerate()函数的示例代码: words = ["hello", "world",…

    python 2023年5月14日
    00
  • 解决pyecharts运行后产生的html文件用浏览器打开空白

    解决pyecharts运行后产生的html文件用浏览器打开空白 在使用pyecharts绘制图表后,我们可以将图表保存为html文件。但是有时候,我们用浏览器打开html文件时,会发现页面是空白的。本攻略将介绍如何解决pyecharts运行后产生的html文件用浏览器打开空白的问题,包括修改pyecharts配置、使用本地服务器等方法。 步骤1:修改pyec…

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