我试图理解一个使用Twisted locatedhere的简单python代理示例。代理实例化一个服务器类,服务器类又实例化一个客户机类。defer.DeferredQueue()用于将数据从客户端类传递到服务器类。在
我现在想知道defer.DeferredQueue()在本例中起作用。例如,这句话的意义是什么:
self.srv_queue.get().addCallback(self.clientDataReceived)
这是类似的
^{pr2}$声明。在
执行self.cli_queue.put(False
)或{
现在只是想和Twisted打交道,所以事情看起来挺吓人的。简单解释一下事物是如何联系在一起的,会使我们更容易理解这一点。在
根据documentation,DeferredQueue有一个普通的
put
方法来向队列添加对象,还有一个延迟的get
方法。在get
方法返回一个延迟对象。向对象添加callback
方法(例如serverDataReceived
)。只要队列中的对象可用,延迟对象就会调用callback
方法。对象将作为参数传递给方法。如果队列为空或serverDataReceived方法尚未完成执行,则程序仍将继续执行下一个语句。当队列中有新对象时,callback
方法将被调用,而与程序的执行点无关。在换句话说,它是一个异步流,与同步流模型相反,在同步流模型中,您可能有一个阻塞队列,也就是说,您的程序将等到队列中的下一个对象可用时才继续执行。在
在示例程序
self.cli_queue.put(False)
中,向队列添加一个False对象。它是一种标志,用来告诉ProxyClient线程将不再有数据添加到队列中。这样就可以断开远程连接。您可以参考这部分代码:设置cli嫒queue=None只是为了在连接关闭后丢弃队列。在
相关问题 更多 >
编程相关推荐