Answers
Twisted的IO操作是单线程的,即reactor线程。然而IO操作并不是消耗CPU性能的瓶颈所在,真正需要消耗CPU性能实际上是业务逻辑。Twisted提供了reactor.callInThread函数,可以让耗时的业务逻辑放到新的业务线程池中执行,而不是在reactor线程中运行,这样可以充分利用多核。
# -*- coding:utf-8 –*-
import time
from twisted.internet.protocol import Protocol
from twisted.internet.protocol import Factory
from twisted.internet import reactor
# 耗时、阻塞的业务逻辑
def logic(data):
print data
time.sleep(3) # 假设这里有个变态的业务逻辑要执行3秒
class TcpServerHandle(Protocol):
def dataReceived(self, data):
reactor.callInThread(logic, data) # 在线程池中运行logic(data)耗时任务,不在reactor线程中运行
reactor.suggestThreadPoolSize(8) # 设置线程池的线程数量为8
factory = Factory()
factory.protocol = TcpServerHandle
reactor.listenTCP(8080, factory)
reactor.run()
可以参考我写的一篇关于Twisted线程模型的博文: http://xxgblog.com/2014/10/16/mina-netty-twisted-10/
死在羊中de狼
answered 9 years ago