账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    Python 多进程通信如何合理的使用管道?
    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
    打赏
    收藏
    点击回答
        全部回答
    • 共 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)。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部