我需要写一个应用程序,可以接收,处理,然后发送事件约15k事件每秒(EPS)。我一直在学习twisted并用它来测试:
Twisted RX only = ~90K EPS
Twisted RX and TX = ~45K EPS (basically half of RX only)
Twisted RX, processing, and TX = ~6K EPS (close, but not 15K EPS)
处理部分主要是一个single regex matches condition-一个受CPU限制的任务。我尝试使用threads.deferToThread
和回调,但正如预期的那样,并没有改善CPU绑定的处理。在
我的服务器有256个核心,我希望能够在使用twisted时使用它们。我能用twisted包装多处理吗?每个进程需要共享一个dict
,所以我必须使用^{
多处理可以在twisted中完成吗?在twisted中有没有一种更快的方式并行运行CPU重的任务(regex表达式)?在
与注释者一样,我会针对多处理问题指向Glyph's answer。在
这样,您就可以派生出一组阻塞的regex匹配进程,并通过childFDs
IProcessProtocol.childDataReceived
和IProcessTransport.writeToChild
方法与它们通信。在这将使twisted reactor继续全速运行,并使您更接近非处理的数字(减去管理额外文件描述符的cpu时间(尽管与让regex阻止reactor相比,这应该很小))
相关问题 更多 >
编程相关推荐