Python多进程通信

Python多进程通信

Python的多进程通信提供了两种方法:Queue、Pipes。两者都在mutilprocessing模块中提供。

接下来以Queue队列为例,实现进程间的通信。在父进程创建两个子进程,分别承担生产、消费角色对同一个Queue进行操作。

#!/usr/bin/env python3
# -*- coding:utf-8 -*-  
'进程间通信'
'Process之间肯定是需要通信的,' \
'操作系统提供了很多机制来实现进程间的通信。' \
'Python的multiprocessing模块包装了底层的机制,' \
'提供了Queue、Pipes等多种方式来交换数据。'
__author__ = 'click'
__date__ = '2018/7/23 下午5:29'

from multiprocessing import Process, Queue

import time, random, os


# 网队列中写操作
def write(queue):
    print('队列的写入操作')

    for x in ['A', 'B', 'c']:
        print('插入的内容是%s' % (x))
        queue.put(x)
        time.sleep(random.random())


# 读操作

def read(queue):
    print('队列的读操作')
    # 这里要循环从队列中读取
    while True:
        s = queue.get(True)
        print('队列中读取的内容是%s' % (s))


if __name__ == '__main__':
    # 创建一个queue
    q = Queue()
    # 创建一个写操作的进程
    pw = Process(target=write, args=(q,))
    # 创建一个读操作的进程
    pr = Process(target=read, args=(q,))
    # 启动进程
    pw.start()
    pr.start()
    pw.join()
    pr.terminate()

执行结果:

队列的写入操作
插入的内容是A
队列的读操作
队列中读取的内容是A
插入的内容是B
队列中读取的内容是B
插入的内容是c
队列中读取的内容是c

Queue作为参数在write、read方法中传递,write往队列中添加数据。read从队列中获取新数据。并进行消费

例子源码

Python多进程通信可以使用以下几种方式: 1. 队列(Queue):可以通过队列实现多进程之间的数据传递。多个进程可以通过向队列中放入数据或从队列中取出数据来进行通信Python中提供了`multiprocessing.Queue`类来实现进程间通信。 ```python from multiprocessing import Process, Queue def worker(q): data = q.get() # 处理数据 if __name__ == '__main__': q = Queue() p = Process(target=worker, args=(q,)) p.start() q.put(data) # 向队列中放入数据 p.join() ``` 2. 管道(Pipe):管道是一种双向通信机制,可以在两个进程之间传递数据。Python中的`multiprocessing.Pipe`类可以用于创建管道。 ```python from multiprocessing import Process, Pipe def worker(conn): data = conn.recv() # 处理数据 conn.send(result) # 向管道发送数据 if __name__ == '__main__': parent_conn, child_conn = Pipe() p = Process(target=worker, args=(child_conn,)) p.start() parent_conn.send(data) # 向管道发送数据 result = parent_conn.recv() # 从管道接收数据 p.join() ``` 3. 共享内存(Shared Memory):多个进程可以通过共享内存来实现数据共享。Python中的`multiprocessing.Value`和`multiprocessing.Array`类可以用于创建共享内存。 ```python from multiprocessing import Process, Value, Array def worker(val, arr): val.value = 1 arr[0] = 2 if __name__ == '__main__': val = Value('i',0) # 创建共享变量 arr = Array('i', [0, 0, 0]) # 创建共享数组 p = Process(target=worker, args=(val, arr)) p.start() p.join() print(val.value) # 输出共享变量的值 print(arr[:]) # 输出共享数组的值 ``` 以上是Python多进程通信的几种常用方式,根据具体需求选择合适的方式进行进程间数据传递。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值