Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2进程在套接字上通信_Python_Ipc - Fatal编程技术网

Python 2进程在套接字上通信

Python 2进程在套接字上通信,python,ipc,Python,Ipc,我需要两个过程来沟通。两者都可以单独运行,但当它们一起运行时,它们应该进行通信。他们每分钟只向对方发送几个字节。两者都不被认为是“主机”或“客户端” 我试图创建一个在后台处理这个问题的类。例如,它首先尝试连接到套接字,如果失败,它会尝试侦听,等等。当一个程序终止时,另一个程序会接管侦听,等等。在与此斗争太久之后,我放弃了。有太多的错误,我不能让它可靠地工作 所以我想知道是否有一个好的替代解决方案,或者是否有一个健壮的实现,我可以使用这种东西。我没有时间再胡闹了。我需要它在windows和linu

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

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


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

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

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

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()
第一个进程将:

  • 创建命名管道
  • 收到消息
  • 再发一条消息
  • 删除管道
而seconde流程只会:

  • 发送消息
  • 收到另一条消息
如果在两个不同的终端中执行上述示例,在第一个终端中,您将得到:

Received: Hello World!
Sending: Goodbye World!
在第二个例子中:

Sending: Hello World!
Received: Goodbye World!

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

如果套接字出现问题,您可能希望查看其他IPC机制。例如,让两个进程进行通信,就好像它们只是在文件中写入/读取一样

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

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()
第一个进程将:

  • 创建命名管道
  • 收到消息
  • 再发一条消息
  • 删除管道
而seconde流程只会:

  • 发送消息
  • 收到另一条消息
如果在两个不同的终端中执行上述示例,在第一个终端中,您将得到:

Received: Hello World!
Sending: Goodbye World!
在第二个例子中:

Sending: Hello World!
Received: Goodbye World!
注意:这只是一个例子。如果您需要双向通信,则在需要接收/发送消息时,使用两个命名管道比只打开一个管道进行读/写更方便。

使用两对发布/订阅套接字。

使用两对发布/订阅套接字