Python、Asyncore和forks

2024-09-29 23:26:23 发布

您现在位置:Python中文网/ 问答频道 /正文

对于初学者,我将Twisted和SocketServer与ForkMixIn和ThreadMixIn一起使用,并尝试了“线程池”recepies。在

不过,我想用Python实现一些特殊的功能。在

一点背景。以前我用C编写了一个简单的TCP守护进程,它将绑定到一个套接字并监听它,然后多次预fork X,然后将serversocket desc传递给所有fork,每个人都会非常乐意地接受客户机。在

我检查了基于“选择/投票”的异步,我很喜欢它。我唯一的缺点是,我可以通过几次分叉来释放一点CPU,以利用多CPU机器的优势,并希望在调度方面取得最佳效果。在

我不能让它为我的生活工作。只有一个实例可以接受连接,其他所有实例都在处理连接时抛出异常,“cannotiterate thru Empty”。在

这是可行的吗?我查了很多,但是我找不到任何用于分叉异步分派器的代码(cry)

谢谢你!在

更新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])

总是发生在接受,不管我是否在前面叉叉异步循环等等

更新2:(完整来源)pastebined source


Tags: 实例py功能twistedcpufork线程handle
1条回答
网友
1楼 · 发布于 2024-09-29 23:26:23

您应该使用代码标记进行回溯,否则它将显示为混乱,并且我们看不到异常类型。在

但我相信它是TypeError: 'NoneType' object is not iterable,因为self.accept()可以返回{}。原因是多个进程可以获取监听套接字的read事件,但只有一个进程可以接受它。{{cd4}将返回

将您的handle_accept()更改为在accept()返回{}时立即返回。在

相关问题 更多 >

    热门问题