多处理远程服务器和套接字错误

时间:2013-07-15 12:32:18

标签: python sockets multiprocessing

我正在使用多处理模块创建一个远程队列,我收到一个套接字错误: “[Errno 10061]无法建立连接,因为目标机器主动拒绝它”

我的服务器代码非常基础:

from multiprocessing.managers import BaseManager
import Queue
queue = Queue.Queue()
class QueueManager(BaseManager): pass
QueueManager.register('get_queue', callable=lambda:queue)
m = QueueManager(address=('127.0.0.1', 50000), authkey='test')
s = m.get_server()
s.serve_forever()

我需要服务器做的就是保住一份工作,然后通过让工人查询队列并拉出工作来处理。

我的客户端正在访问机器,以便将作业放入队列:

import uuid
from multiprocessing.managers import BaseManager
class QueueManager(BaseManager): pass
QueueManager.register('get_queue')
m = QueueManager(address=('machine ip', 50000), authkey='test')
m.connect()
queue = m.get_queue()
queue.put(r"%s" % uuid.uuid4().get_hex())
queue.put(r%s" % uuid.uuid4().get_hex())

调用get()来获取队列中的项目。

当我尝试访问远程队列时,出现以下错误: “[Errno 10061]没有联系,因为目标机器主动拒绝它”,如上所述。如果我在同一台机器上运行代码它工作正常,但是当我在许多机器中分发它时,客户端无法命中服务器。

我可以很好地ping这台机器,所以我的第一个想法是禁用防火墙。我这样做仍然得到套接字错误。

我现在正在使用Windows 7进行开发。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

您的服务器代码正在侦听环回网络接口127.0.0.1。此接口不能从外部网络(如连接的以太网接口)获得。

如果要从任何网络接口访问服务器,请在服务器中使用空主机名。

m = QueueManager(address=('', 50000), authkey='test')

答案 1 :(得分:2)

看起来你在监听环回地址。如果您尝试从外部联系服务器,这将不起作用...

尝试将127.0.0.1更改为服务器中的计算机地址...