【问题标题】:Python Multiprocessing: socket error timeout while remote connection to a ManagerPython多处理:远程连接到管理器时套接字错误超时
【发布时间】:2011-07-25 14:38:01
【问题描述】:

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

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

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

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。
我的猜测:中间有一个(或两个!)防火墙使连接变得不可能。这是正确的吗?
如果是:有没有办法使用安全的已知端口来避开防火墙,或者可能是更礼貌的解决方案?
如果不是:发生了什么?
谢谢!!

【问题讨论】:

    标签: python sockets timeout multiprocessing firewall


    【解决方案1】:

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

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

    如果客户端连接到 localhost 端口 12345,它应该通过隧道连接到 a.b.c.d 端口 50000。

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

    【讨论】:

    • 我认为这个想法很好,可能对我有用。但是,我还不清楚如何将 ssh 隧道连接传递给 Python 内部的代码。也许使用 Paramiko (lag.net/paramiko) 之类的东西?
    • ssh -L 在您 SSH 的主机上创建一个侦听器,该侦听器转发到 Python 在远程主机上创建的侦听器。您要求您的客户端连接到 ssh 侦听器,就好像它是远程 python。
    • 非常感谢。该解决方案似乎有效,即使我无法产生我想要的输出,但我认为我的代码存在问题。声望低于 15 我不能投票给你,但是谢谢!
    【解决方案2】:

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

    为此,请使用:

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

    【讨论】:

      猜你喜欢
      • 2018-10-25
      • 2012-08-05
      • 1970-01-01
      • 1970-01-01
      • 2012-09-14
      • 2018-09-23
      • 2011-11-23
      • 2016-05-14
      • 1970-01-01
      相关资源
      最近更新 更多