Python 如何在twsited中使用defferd进行异步事件处理

Python 如何在twsited中使用defferd进行异步事件处理,python,asynchronous,twisted,Python,Asynchronous,Twisted,我有一个客户端,这个客户端应该读取服务器事件。我想知道如何使这段代码异步。我看到了defferd示例,但我不知道如何以正确的方式将其用于传入事件 class EchoClient(protocol.Protocol): def dataReceived(self, data): d = Deferred() d.addCallback(self.incoming_event) d.callback(data) def inco

我有一个客户端,这个客户端应该读取服务器事件。我想知道如何使这段代码异步。我看到了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()

当我有很多的事件处理这个事件是一个接一个,我需要他们一起处理。有什么办法吗?或者我需要把它们放在常规的theread中?

Twisted是一种协作多任务系统。它提供了对多线程的一些支持,但必须显式使用任何多线程。单线程多任务系统不会同时运行多个任务。他们不能。这是他们优势的一部分(多线程程序员更难编写、理解和调试)

很多很多基于Twisted的程序都是单线程的,并且工作得很好。您还没有解释为什么程序中的事件逐个处理是一个问题


我可以猜测,这可能是因为在短时间内有很多这样的问题,而处理这些问题会阻碍GUI的更新。如果是这种情况,那么也许您可以通过提高GUI事件的优先级(Gtk允许您这样做)或对一次处理的非GUI事件数量施加一些人为限制来解决问题。

示例代码中没有任何内容需要异步。你问题的其余部分也没有给出太多关于你想要完成什么或者你在哪里被卡住的暗示。我想在任何人给你一个有用的答案之前,你需要扩展这个问题。我扩展我的问题,我有一个gui应用程序,它使用twisted来更新小部件。当我收到大量的数据时,这个事件的处理是一个接一个的。我想知道有没有什么扭曲的方法可以做到这一点?!