1

我正在使用多处理模块创建一个远程队列,我收到一个套接字错误:“[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 进行开发。

有什么建议么?

4

2 回答 2

2

您的服务器代码正在侦听环回网络接口 127.0.0.1。此接口不可用于外部网络,例如附加的以太网接口。

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

m = QueueManager(address=('', 50000), authkey='test')
于 2013-07-15T13:04:25.270 回答
2

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

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

于 2013-07-15T13:05:07.980 回答