我需要编写一个可以接收,处理,然后以~15k事件每秒(EPS)发送事件的应用程序。我一直在学习扭曲,并一直用它来测试一些测试:
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时使用它们。我可以用扭曲的方式包装多处理吗?每个流程都需要共享dict
,因此我必须使用multiprocessing.Manager()
。
可以在扭曲的情况下完成多处理吗?有没有更快的方法在扭曲的情况下并行运行CPU密集型任务(正则表达式)?
答案 0 :(得分:3)
与评论者一样,我会在Glyph's answer指出多处理问题。
通过这种方式,您可以产生一系列阻塞正则表达式匹配过程,并通过childFD IProcessProtocol.childDataReceived
和IProcessTransport.writeToChild
方法与它们进行通信。
这会让你的扭曲反应堆继续以全速运行,并且应该让你更接近你的非处理数字(减去管理额外文件描述符的cpu时间(尽管与正则表达式相比,这应该很小)阻止反应堆))