Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否可以使用tornado';s系列引擎和twisted系列任务?_Python_Asynchronous_Client Server_Twisted_Tornado - Fatal编程技术网

Python 是否可以使用tornado';s系列引擎和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 =

我正在从事的项目都是用Tornado编写的,但是我已经包含了一些Twisted来处理异步XML-RPC。我想知道你是否可以使用Tornado的gen.engine并用Twisted的代码生成gen.Task。这可能吗?如果是,语法会是什么样子?提前感谢。

当然可以-但它在Twisted中称为
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