Python 是否可以使用tornado';s系列引擎和twisted系列任务?
我正在从事的项目都是用Tornado编写的,但是我已经包含了一些Twisted来处理异步XML-RPC。我想知道你是否可以使用Tornado的gen.engine并用Twisted的代码生成gen.Task。这可能吗?如果是,语法会是什么样子?提前感谢。当然可以-但它在Twisted中称为Python 是否可以使用tornado';s系列引擎和twisted系列任务?,python,asynchronous,client-server,twisted,tornado,Python,Asynchronous,Client Server,Twisted,Tornado,我正在从事的项目都是用Tornado编写的,但是我已经包含了一些Twisted来处理异步XML-RPC。我想知道你是否可以使用Tornado的gen.engine并用Twisted的代码生成gen.Task。这可能吗?如果是,语法会是什么样子?提前感谢。当然可以-但它在Twisted中称为inlineCallbacks: from twisted.internet.defer import inlineCallbacks @inlineCallbacks def foo(): x =
inlineCallbacks
:
from twisted.internet.defer import inlineCallbacks
@inlineCallbacks
def foo():
x = yield bar()
print x
您可以将
gen.Task
与接受回调
关键字参数的任何内容一起使用。但是,Twisted样式的代码通常返回一个延迟的
,而不是将回调作为输入。您需要将延迟
包装在tornado.gen
可以理解的东西中(可能是未来
)。类似这样(未经测试):
为了正确设置异常,我修改了Ben的示例代码
def wrap_deferred(deferred):
future = tornado.concurrent.TracebackFuture()
deferred.addCallback(future.set_result)
deferred.addErrback(lambda err: future.set_exception(err.value))
return future
twisted wrap异常作为失败。失败。future.set_异常抱怨它不是异常类型
def wrap_deferred(deferred):
future = tornado.concurrent.TracebackFuture()
deferred.addCallback(future.set_result)
deferred.addErrback(lambda err: future.set_exception(err.value))
return future