gpt4 book ai didi

Python、Asyncore 和 fork

转载 作者:行者123 更新时间:2023-12-03 11:53:30 25 4
gpt4 key购买 nike

对于初学者,我使用了 Twisted 和 SocketServer 以及 ForkMixIn、ThreadMixIn 并尝试了“线程池”recepies。

但是,我想在 Python 中做一些特别的工作。

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

我检查了我非常喜欢的基于“select/poll”的异步。我唯一的不满是,我可以通过 fork 几次来获得一点 CPU 不受限制,以利用多 CPU 机器,并希望通过调度获得最好的结果。

我不能让它为我的生活工作。只有 1 个实例可以接受连接,所有其他实例只是在处理连接时抛出异常,“不能通过 Empty 进行迭代”。

这甚至可行吗?我检查了很多,但我找不到任何用于 fork 异步调度程序的代码(哭)

谢谢!

更新 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 之前 fork ,等等。

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

最佳答案

您应该使用代码标记进行回溯,否则会显示困惑并且我们看不到异常类型。

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

更改您的 handle_accept()立即返回 accept()返回 None .

关于Python、Asyncore 和 fork ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1713078/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com