只是个开始,我用扭曲和SocketServer的既ForkMixIn,ThreadMixIn,并试图“线程池” recepies。

不过,我想提出一些具体的工作,在Python。

小有一点背景。以前我用C编写可以绑定一个套接字和听就可以了简单的TCP守护程序,然后预叉X很多次,然后就通过ServerSocket的递减到全部叉和每个人都非常非常marrily接受的客户。

我检查了“选择/轮询”基于asyncore我喜欢很多。我唯一的牛肉是,我可以通过派生几次采取多CPU机器上的优势,并希望最好与调度得到一点点的CPU绑定。

我不能让我的生活工作。只有1个单个实例可以接受连接,所有其他人简单地扔在处理连接异常,“不能重复直通空”。

是这样的,即使可行?我检查了很多,但我无法找到任何代码为分叉asyncore调度员(哭)

谢谢!

<强>更新1:(作为请求完整回溯)

error: uncaptured python exception, closing channel <__main__.EchoServer listening 0.0.0.0:8001 at 0x2ad4880c93f8> (<type 'exceptions.TypeError'>:'NoneType' /python2.6/asyncore.py|readwrite|99] [/usr/local/python2.6.9/lib/python2.6/asyncore.py|handle_read_event|408] [./6py-server.py|handle_accept|87])

总是发生在接受,而不管如果我的asyncore.loop等之前叉。

<强>更新2:(完整的源) pastebined源

有帮助吗?

解决方案

您应该使用代码标记为追踪,否则它会显示搞砸,我们没有看到异常类型。

不过,我相信这是因为TypeError: 'NoneType' object is not iterable可以self.accept()返回None。其原因是,几个进程可以得到读取监听套接字事件,但只有一个可以接受它。其余的过程会得到它被捕获EWOULDBLOCK错误,但随后而是返回连接地址对None

更改handle_accept()accept()返回None立即返回。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top