Twisted框架的reactor适合于处理短的、非阻塞的操作。但是如果要处理一些复杂的、或者包含阻塞的操作又该怎么办呢?Twisted提供了线程池来在其他的线程而不是主线程(Twisted的reactor线程)中执行慢的操作——使用reactor.callInThread()
API。这就意味着reactor在执行计算时还能保持运行并对事件做出反应。一定要记住线程池中的处理不是线程安全的。这就意味着当你使用了全局的状态之后,还要面临所有那些传统的多线程编程的同步问题。下面是一个简单的例子:
class UsingBlocking(object):
@defer.inlineCallbacks
def process_item(self, item, spider):
price = item["price"][0]
out = defer.Deferred()
reactor.callInThread(self._do_calculation, price, out)
item[