我正试图找出如何使用twisted使代码更加异步。
deferred_obj.callback
提供某些结果后调用然而,链式回调不会被认为是异步的,因为它们是链式的,并且事件循环将继续并发地触发它们中的每一个,直到没有更多的,对吧?
但是,如果我有一个延迟对象,并且我将延迟obj.callback作为其回调附加在d.addCallback(deferred_obj.callback)
中,那么这将被认为是异步的,因为延迟obj正在等待数据,然后传递数据的方法也在等待数据,但是,一旦i d.callback'd'对象处理数据,它就会调用deferred_obj.callback。但是,由于此对象被延迟,与链式回调不同,它将异步执行。。。对的?
假设我的所有代码都是非阻塞的,这意味着链式回调不是异步的,而链式延迟是异步的,对吗?
使用延迟不会使代码异步。
如果您有长时间运行的同步代码,您可以使用一个合作者(twisted.internet.task)延迟线程或将其分解为短迭代
有点,但是在这种类型的事件处理中没有并发性。在代码返回到事件循环之前,不会调用新的回调。所以回调链是同步的。它在事件循环中只是异步的。
这是此类编程的一个警告,处理程序执行最快,并尽快返回事件循环。它不应该在处理程序中执行任何耗时的任务。
回调(默认情况下)是同步的。然而,正如Twisted doc所指出的:
因此可以使用它在回调链中执行一些异步处理。让我们这样做:
相关问题 更多 >
编程相关推荐