Python多处理:远程连接到管理器时套接字错误超时

2024-05-29 03:11:20 发布

您现在位置:Python中文网/ 问答频道 /正文

新来者和首次提问。
我正在使用Python的多处理模块,它目前正在我的本地主机上创建一个管理器和几个(45)个进程。 我的经理设置如下:

manager = QueueManager(address=('', 50000), authkey='abracadabra')
manager.get_server().serve_forever()

我还想在另一台计算机上远程创建一些其他客户端进程。所以,假设我的IP是a.b.c.d,远程计算机中客户端的管理器设置如下:

^{pr2}$

(是的,这是从文档中粘贴的副本)。
但是,我运行服务器,localhost中的所有45个进程都正常,然后我运行远程客户端,得到以下结果:

Traceback (most recent call last):
  File "govmap-parallel-crawler-client.py", line 144, in <module>
    manager.connect()
  File "/usr/lib/python2.6/multiprocessing/managers.py", line 474, in connect
    conn = Client(self._address, authkey=self._authkey)
  File "/usr/lib/python2.6/multiprocessing/connection.py", line 134, in Client
    c = SocketClient(address)
  File "/usr/lib/python2.6/multiprocessing/connection.py", line 252, in SocketClient
    s.connect(address)
  File "<string>", line 1, in connect
socket.error: [Errno 110] Connection timed out

两台计算机都可以通过ping和ssh相互连接而不会出现问题。
我猜有一个(或两个!)防火墙使连接不可能。这是对的吗?
如果是:有没有一种方法可以使用一个安全的已知端口来避免防火墙或者可能是一个更礼貌的解决方案?
如果没有:发生了什么?
谢谢!!在


Tags: inpy客户端远程进程addresslibusr
2条回答

使用ssh隧道进行互连?E、 客户机上的g:

ssh a.b.c.d-L12345:本地主机:50000在

如果客户端连接到本地主机端口12345,它应该被隧道传输到a.b.c.d端口50000。在

编辑:当然,在生产环境中使用SSH隧道可能不是最好的解决方案,但至少它可以消除其他问题。在

根据代码片段的定义,服务器只在localhost(127.0.0.1)上侦听,而不在(a.b.c.d)上侦听,因此您无法从远程客户端进行连接。在

为此,请使用:

manager = QueueManager(address=('a.b.c.d', 50000), authkey='abracadabra')
manager.get_server().serve_forever()

相关问题 更多 >

    热门问题