Python 什么时候应该将协议处理代码拆分为Twisted中的延迟代码?

Python 什么时候应该将协议处理代码拆分为Twisted中的延迟代码?,python,twisted,Python,Twisted,在Twisted中实现客户机协议,我当前的代码对接收到的每个协议单元都做了大量工作,它不使用I/O,因此当前没有使用延迟。 处理并不意味着密集,但它对可插拔接口开放 是否有一个分区来做这个分区? ,你可以考虑在插件被调用的点上“延迟”,因为你不能预测他们是否会对数据库、远程进程、Web服务,不管是什么I/O。 看看使用,这将简化您的生活,只需使用Python的yield语句就可以将您的处理分解为延迟。然后,你可以尝试用各种方式分解你的计算密集型工作,也许给其他协议处理程序一个运行和完成的机会,特

在Twisted中实现客户机协议,我当前的代码对接收到的每个协议单元都做了大量工作,它不使用I/O,因此当前没有使用延迟。 处理并不意味着密集,但它对可插拔接口开放

是否有一个分区来做这个分区?

,你可以考虑在插件被调用的点上“延迟”,因为你不能预测他们是否会对数据库、远程进程、Web服务,不管是什么I/O。 看看使用,这将简化您的生活,只需使用Python的
yield
语句就可以将您的处理分解为延迟。然后,你可以尝试用各种方式分解你的计算密集型工作,也许给其他协议处理程序一个运行和完成的机会,特别是如果一些处理程序是计算密集型的,而其他的则不是。

你可以考虑在插件被调用的点上“延迟”,因为您无法预测他们是否会对数据库、远程进程、web服务等进行I/O操作


看看使用,这将简化您的生活,只需使用Python的
yield
语句就可以将您的处理分解为延迟。然后,您可以尝试以各种方式分解计算密集型工作,也许是为了给其他协议处理程序一个运行和完成的机会,特别是如果某些处理程序是计算密集型的,而其他处理程序不是。

我正在考虑在插件调用时进行拆分,但我想知道拆分的限制或建议的方式。如果您将代码转换为使用@inlineCallbacks decorator,然后,您可以将类似于
results=plugin.method(arg1,arg2)
的插件调用转换为
results=yield plugin.method(arg1,arg2)
,这将有效地在插件调用时分割处理。这是inlineCallbacks的“内联”方面,它确实有助于整理扭曲的代码。这个答案并不正确。如果用
yield
语句分解一个函数,它不一定是异步的,除非生成的东西是一个
延迟的
;即使如此,
延迟的
也必须在产生时未被点燃;为了产生任何效果,您必须在以后(…)产生延迟。更好的方法是
twisted.internet.task.cooperation
.Yeeps!我遵从@Glyph(双关语不是故意的,可能已经听过一百次了,但它只是突然出现在我的脑海里)。@Glyph-也感谢编辑,我可以发誓我检查了拼写,我在评论中得到了正确的拼写,一定是从早期评论草稿中复制/粘贴的。(我喜欢你的波士顿会议演讲,看不到幻灯片。)我正在考虑在插件调用时进行拆分,但我想知道拆分的限制或建议的方式在哪里。如果你将代码转换为使用@inlineCallbacks decorator,那么你可以转换插件调用,可能类似于
results=plugin.method(arg1,arg2)
to
results=yield plugin.method(arg1,arg2)
这将有效地在插件调用时分割处理。这是inlineCallbacks的“内联”方面,它确实有助于整理扭曲的代码。这个答案并不正确。如果用
yield
语句分解函数,它不一定会变为异步,除非生成的东西是
延迟的
;即使如此,
延迟的
在产生时必须是未被点燃的;为了产生任何效果,你必须
稍后产生延迟(…)
。更好的方法是
twisted.internet.task.cooperation
。是的!我遵从@Glyph(双关语不是故意的,可能已经听过一百次了,但它突然出现在我的脑海中)。@Glyph-也感谢编辑,我可以发誓我检查了拼写,我在评论中确实正确了,一定是从早期评论草稿中复制/粘贴的。(我喜欢你在波士顿会议上的演讲,看不到幻灯片。)