2011-03-29 2 views
1

여기에서 처음으로 질문드립니다.
현재 로컬 호스트에 관리자 및 커플 (45) 프로세스를 작성중인 Python의 다중 처리 모듈을 사용 중입니다. 내 관리자는 다음과 같은 설정 :Python Multiprocessing : Manager에 원격으로 연결하는 동안 소켓 오류가 발생하여 시간이 초과되었습니다.

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() 

은 (네, 복사 - 붙여 넣기 문서에서이다).
는 그러나, 나는 서버를 실행하고 로컬 호스트에있는 모든 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 

두 컴퓨터는 핑 문제없이 서로 ssh를 할 수 있습니다.
내 생각 엔 연결이 불가능한 사이에 하나 또는 두 개의 방화벽이 있습니다. 이 올바른지?
예인 경우 : 안전한 방화벽을 피하기 위해 안전한 포트를 사용하는 방법이 있습니까?
만약 아니라면 : 무슨 일이 일어나고 있습니까?
감사합니다.

답변

1

상호 연결에 ssh 터널을 사용 하시겠습니까?

ssh를 ABCD -L12345 : 로컬 호스트 : 클라이언트의 예 : 50000

클라이언트가 포트 12345을 localhost에 연결하는 경우가 터널링한다 ABCD 포트는 EDIT 50000

: 물론, SSH를을 사용하여 터널은 프로덕션 환경에서 최상의 솔루션은 아니지만 적어도 다른 문제를 제거 할 수 있습니다.

+0

나는 아이디어가 좋은 내 경우에는 아마도 유용하다 생각합니다. 그러나, 나는 파이썬 안에서 코드에 ssh-tunneled 연결을 전달하는 방법을 명확하게 밝히지 않았다. 아마도 Paramiko (http://www.lag.net/paramiko/)와 같은 것을 사용하고 있을까요? – Mikk

+0

ssh -L은 원격 호스트에서 파이썬이 생성 한 리스너로 전달하는 SSH에서 청취자를 생성합니다. 원격 Python처럼 클라이언트에게 ssh 수신기에 연결하도록 요청합니다. – Bittrance

+0

고맙습니다. 솔루션은 비록 내가 원하는 결과를 낼 수는 없지만 작동하는 것처럼 보이지만 내 코드에 문제가 있다고 생각합니다. 15 미만의 명성으로 나는 당신을 업 그레 이드 할 수 없지만 감사합니다! – Mikk

0

서버가 로컬 호스트 (127.0.0.1)에서만 수신하고 (a.b.c.d) 수신하지 않으므로 원격 클라이언트에서 연결할 수 없습니다.

이렇게하려면 사용

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