我有一个客户端和这个客户端shoud读取服务器事件。我想知道如何使这段代码异步。我看到了defferd的例子,但我没有得到如何以正确的方式将它用于传入事件。
class EchoClient(protocol.Protocol):
def dataReceived(self, data):
d = Deferred()
d.addCallback(self.incoming_event)
d.callback(data)
def incoming_event(self,data):
#some thing
class EchoFactory(protocol.ClientFactory):
protocol = EchoClient
def __init__(self, app):
self.app = app
def clientConnectionFailed(self, connector, reason):
print "Connection failed."
reactor.stop()
def clientConnectionLost(self, connector, reason):
print "Connection lost."
reactor.stop()
当我有很多事件时,这个事件的处理是一个接一个,我需要他们一起处理。有没有扭曲的方式?或者我需要把它们放在那里?
答案 0 :(得分:1)
Twisted是一个合作的多任务系统。它为多线程提供了一些支持,但必须明确使用任何多线程。单线程多任务系统不会同时运行多个任务。他们不能。这是他们力量的一部分(多线程程序员更难编写,理解和调试)。
许多很多很多基于Twisted的程序都是单线程的,工作得很好。您还没有解释为什么程序中的事件是逐个处理的问题。
我猜可能是因为它们在很短的时间内存在很多,并且处理它们会妨碍GUI的更新。如果是这种情况,那么也许您可以通过提高GUI事件的优先级来解决问题(Gtk允许您这样做)或对一次处理多少非GUI事件施加一些人为限制。