Python多进程通信Queue、Pipe、Value、Array实例

下面我详细讲解一下Python中多进程通信的四个工具:Queue、Pipe、Value和Array的使用方法。

1. Queue

Queue是Python的一个线程安全的队列,可以在多个进程间进行通信。特点是先进先出,可以放置任意类型的数据。

创建Queue

from multiprocessing import Queue

queue = Queue(maxsize=10)  # maxsize为队列的最大长度

Queue的基本操作

queue.put(item)  # 向队列中插入一个元素
queue.get()  # 从队列中取出一个元素
queue.put_nowait(item)  # 向队列中插入一个元素,若队列已满,则立即抛出异常
queue.get_nowait()  # 从队列中取出一个元素,若队列为空,则立即抛出异常
queue.empty()  # 判断队列是否为空
queue.full()  # 判断队列是否已满

Queue示例

from multiprocessing import Process, Queue

# 生产者
def producer(queue):
    for i in range(10):
        print(f'生产者生产了{i}号产品')
        queue.put(i)

# 消费者
def consumer(queue):
    while True:
        if not queue.empty():
            item = queue.get()
            print(f'消费者消费了{item}号产品')

if __name__ == '__main__':
    queue = Queue(maxsize=5)  # 创建队列
    # 创建生产者进程以及消费者进程
    p1 = Process(target=producer, args=(queue,))
    p2 = Process(target=consumer, args=(queue,))
    p1.start()
    p2.start()
    p1.join()
    p2.terminate()

2. Pipe

Pipe是Python中的一个双向管道,可以实现两个进程之间的通信。

创建Pipe

from multiprocessing import Pipe

conn1, conn2 = Pipe(duplex=True)  # duplex表示是否使用双向通信,默认为True

Pipe的基本操作

conn1.send(data)  # 往另外一个进程的Pipe中写入数据
conn2.recv()  # 从另外一个进程的Pipe中读取数据
conn1.recv()  # 从另外一个进程的Pipe中读取数据
conn2.send(data)  # 往另外一个进程的Pipe中写入数据

Pipe示例

from multiprocessing import Process, Pipe

# 子进程1
def recv(conn):
    print(f'子进程1接收到数据:{conn.recv()}')

# 子进程2
def send(conn):
    conn.send('hello, world!')

if __name__ == '__main__':
    conn1, conn2 = Pipe()  # 创建Pipe,即双向管道
    # 创建两个子进程1和子进程2
    p1 = Process(target=recv, args=(conn1,))
    p2 = Process(target=send, args=(conn2,))
    p1.start()
    p2.start()
    p1.join()
    p2.join()

3. Value

Value是Python中的一个进程共享变量,可以在多个进程间进行通信。

创建Value

from multiprocessing import Value

val = Value('i', 0)  # i表示数据类型,0为初始值

Value的基本操作

val.value  # 获取变量值
val.value = 10  # 修改变量值

Value示例

from multiprocessing import Process, Value

# 子进程1
def update(val):
    val.value += 5  # 修改val共享变量的值
    print(f'子进程1更新val共享变量,更新后的值为{val.value}')

# 子进程2
def read(val):
    print(f'子进程2读取val共享变量的值为{val.value}')

if __name__ == '__main__':
    val = Value('i', 0)  # 创建共享变量val
    # 创建两个子进程1和子进程2
    p1 = Process(target=update, args=(val,))
    p2 = Process(target=read, args=(val,))
    p1.start()
    p2.start()
    p1.join()
    p2.join()

4. Array

Array是Python中的一个进程共享数组,可以在多个进程间进行通信。

创建Array

from multiprocessing import Array

arr = Array('i', [1, 2, 3, 4, 5])  # i表示数据类型,[1,2,3,4,5]为初始值

Array的基本操作

arr[index]  # 获取数组指定下标的值
arr[index] = value  # 修改数组指定下标的值

Array示例

from multiprocessing import Process, Array

# 子进程1
def update(arr):
    for i in range(len(arr)):
        arr[i] += 1
    print(f'子进程1更新了共享数组,更新后的值为{arr[:]}')

# 子进程2
def read(arr):
    print(f'子进程2读取了共享数组的值为{arr[:]}')

if __name__ == '__main__':
    arr = Array('i', [1, 2, 3, 4, 5])  # 创建共享数组arr
    # 创建两个子进程1和子进程2
    p1 = Process(target=update, args=(arr,))
    p2 = Process(target=read, args=(arr,))
    p1.start()
    p2.start()
    p1.join()
    p2.join()

以上就是Python多进程通信中Queue、Pipe、Value、Array的详细介绍和使用方法,希望能对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python多进程通信Queue、Pipe、Value、Array实例 - Python技术站

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

相关文章

  • Python中运行并行任务技巧

    Python中运行并行任务技巧攻略 在Python中,我们常常需要处理大量的并行任务,例如多个API请求或者多个数据处理等等。本文将讲述Python中运行并行任务的技巧,以及如何使用Python中的各种工具实现并行任务。 多线程与多进程 在Python中,我们可以使用多线程和多进程来实现并行任务。多线程与多进程的区别在于,多线程是在同一进程内创建多个线程以同…

    python 2023年6月5日
    00
  • python 实现有道翻译功能

    Python实现有道翻译功能攻略 1. 准备工作 在Python中实现有道翻译功能,需要先进行以下准备工作: 注册有道智云账户,并申请翻译API的应用密钥; 安装requests库和json库,可以使用以下命令进行安装: pip install requests pip install json 2. 实现翻译功能 有道翻译API支持多种语言的翻译,可通过A…

    python 2023年6月3日
    00
  • Python探索之Metaclass初步了解

    Python探索之Metaclass初步了解 什么是Metaclass Metaclass,中文翻译为元类,是一种特殊的类。和普通类一样,它可以定义方法、属性等。但是,普通类创建的实例,也就是对象,是该类的实例。而元类创建的类,也就是元类的实例,是普通类的类。 通过元类,我们可以控制生成的所有类。可以在动态创建类的过程中,控制、修改类的行为、属性、方法等。 …

    python 2023年6月5日
    00
  • python list转dict示例分享

    在Python中,我们经常需要将列表(list)转换为字典(dict)。下面是两种常用的方法: 方法一:使用zip函数 我们可以使用Python内置函数zip()将两个列表合并为一个字典。其中,第一个列表中的元素作为字典的键(key),第二个列表中的元素作为字典的值(value)。下面是一个示例: keys = [‘a’, ‘b’, ‘c’] values …

    python 2023年5月13日
    00
  • 利用python实现聚类分析K-means算法的详细过程

    Python实现K-means聚类算法 K-means聚类算法是一种常用的无监督学习算法,它的主要思想是将数据集划分为K个簇,使得同一簇内的数据点相似度较高,不同簇之间的数据点相似度较低。本文将详细讲解如何使用Python实现K-means聚类算法,并提供两个示例说明。 K-means聚类算法原理 K-means聚类算法的基本思想是从数据集中随机选择K个点作…

    python 2023年5月14日
    00
  • Python3 venv搭建轻量级虚拟环境的步骤(图文)

    下面我将详细讲解如何使用Python3venv搭建轻量级虚拟环境的步骤和示例。 1. 什么是Python3venv? Python3venv是Python3自带的一个虚拟环境工具,它可以帮助你创建轻量级且独立的Python环境,使得不同项目之间的依赖不会相互干扰,从而提高开发效率。 2. 如何使用Python3venv搭建虚拟环境? 使用Python3ven…

    python 2023年5月13日
    00
  • Python将多个excel表格合并为一个表格

    下面我将详细讲解Python将多个excel表格合并为一个表格的完整实例教程。 前置条件 在开始之前,请确保你已经安装了以下库: pandas openpyxl 你可以通过pip命令进行安装: pip install pandas pip install openpyxl 实现步骤 第一步:导入所需库 在Pyhton文件中,首先需要导入所需的库。本次需要使用…

    python 2023年5月13日
    00
  • python 用 xlwings 库 生成图表的操作方法

    下面就详细讲解一下如何使用Python的xlwings库生成图表的操作方法。 1. 简介 xlwings是一个用于在Excel中操作Python的插件库,它提供了一个便捷的方式来使用Python处理数据,并在Excel中进行可视化展示。在xlwings中生成图表需要使用Excel的图表对象,并操作Excel图表对象的属性来进行设定。 2. 安装 首先需要安装…

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