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

时间:2011-03-29 20:24:04

标签: python sockets timeout multiprocessing firewall

新人和第一个问题。
我正在使用Python的多处理模块,它正在我的localhost上创建一个Manager和几个(45)进程。 我的经理设置如下:

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

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

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

(是的,它是从文档中复制粘贴的) 但是,我运行服务器并且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 我猜:在连接之间不可能有一个(或两个!)防火墙。这是对的吗? 如果是:是否有办法使用安全的已知端口以避免防火墙或可能更礼貌的解决方案? 如果不是:发生了什么事? 谢谢!

2 个答案:

答案 0 :(得分:1)

使用ssh隧道进行互连?例如客户:

ssh a.b.c.d -L12345:localhost:50000

如果客户端连接到localhost端口12345,则应将其隧道连接到a.b.c.d端口50000。

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

答案 1 :(得分:0)

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

要这样做,请使用:

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