【问题标题】:Python 2 process communicate on socketPython 2 进程在套接字上通信
【发布时间】:2012-01-05 08:05:11
【问题描述】:

我需要 2 个进程进行通信。两者都可以单独运行,但是当它们一起运行时,它们应该进行通信。它们每分钟只相互发送几个字节。两者都不被认为是“主机”或“客户端”。

我尝试创建一个在后台处理该问题的类。例如,它首先尝试连接到套接字,如果失败,它会尝试监听,等等。当一个程序终止时,另一个程序会接管监听,等等。在为此挣扎了太久之后,我放弃了。有太多的错误,我不能让它可靠地工作。

所以我想知道是否有一个好的替代解决方案,或者是否有我可以使用的这类东西的健壮实现。我没有时间再胡闹了。我需要它在 windows 和 linux 上工作。

【问题讨论】:

    标签: python ipc


    【解决方案1】:

    使用0mq,带有两对 PUB/SUB 套接字。

    【讨论】:

      【解决方案2】:

      如果您在使用套接字时遇到问题,您可能需要查看其他 IPC 机制。例如,named pipes 让两个进程进行通信,就好像它们只是在向文件写入/读取文件一样。

      以下示例显示了如何创建命名管道以及如何在两个不同的进程中打开以进行读写:

      import os
      
      pipe_name = '/tmp/ipc'
      
      if not os.path.exists(pipe_name):
          os.mkfifo(pipe_name)
          try:
              with open(pipe_name) as f:
                  print 'Received:', f.read()
              with open(pipe_name, 'w') as f:
                  message = 'Goodbye World!'
                  print 'Sending:', message
                  f.write(message)
          finally:
              os.remove(pipe_name)
      else:
          with open(pipe_name, 'w') as f:
              message = 'Hello World!'
              print 'Sending:', message
              f.write(message)
          with open(pipe_name) as f:
              print 'Received:', f.read()
      

      第一个过程将:

      • 创建命名管道
      • 接收消息
      • 发送另一条消息
      • 删除管道

      而第二个过程将只是:

      • 发送消息
      • 收到另一条消息

      如果您在两个不同的终端中执行上面的示例,您将在第一个终端中得到:

      Received: Hello World!
      Sending: Goodbye World!
      

      在第二个中:

      Sending: Hello World!
      Received: Goodbye World!
      

      注意:这只是一个例子。如果您需要双向通信,则使用两个命名管道会更方便,而不是在需要接收/发送消息时只打开一个用于读取/写入。

      【讨论】:

        猜你喜欢
        • 2017-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多