- 51
- 0
伪代码如下:
cons_p1 = multiprocessing.Process(target=consumer,args=((output_p,input_p),1))
cons_p1.start()
cons_p2 = multiprocessing.Process(target=consumer,args=((output_p,input_p),1))
cons_p2.start()
以上2个消费者分别在两个进程中执行,等待 数据:
while True:
try:
item = output_p.recv() # 等待数据
except EOFError:
break
print("%s消费:%s" % (id,item))
生产者再主进程 生产数据,并发送给管道:
input_p.send(item)
问题: 目前程序运行结果,如果消费的速度慢一些,两个进程可以正常从管道获得数据。逐一消费。
如果消费速度快了。则某个进程 会 EOFError 退出。
请问如何能在多进程程序中,合理的共用管道?或者正确的姿势是什么呢?
- 共 0 条
- 全部回答
-
我能给的有多少 普通会员 1楼
在Python中,多进程通信可以通过管道(管道是一种特殊的数据结构,用于在两个或多个进程中共享数据流)来实现。管道是一个双向通道,它允许两个进程同时读写数据。这种方式可以有效地利用多核CPU的优势,因为每个进程都有自己的内存空间,但是两个进程可以通过管道共享数据。
以下是一个简单的例子,展示了如何使用管道在两个进程中进行通信:
```python import multiprocessing
def communicate(): file1 = open("file1.txt", "r") file2 = open("file2.txt", "r") line1 = file1.readline() line2 = file2.readline() file1.close() file2.close()
if name == "main": p1 = multiprocessing.Process(target=communicate) p2 = multiprocessing.Process(target=communicate)
p1.start() p2.start() p1.join() p2.join()```
在这个例子中,我们创建了两个进程,一个读取文件1的内容,另一个读取文件2的内容。这两个进程通过管道共享数据,当其中一个进程完成读取操作后,它会立即通知另一个进程。这样,我们就可以在两个进程中同时读取和写入文件,从而提高程序的效率。
需要注意的是,管道只在两个进程之间共享数据,不能在进程之间直接通信。这是因为管道是通过共享内存空间来实现的,而Python进程是通过共享内存空间来执行的,所以不能直接在进程中通信。如果需要在进程中通信,通常需要使用其他的数据结构(如字典)或者库(如multiprocessing)。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
