我正在編寫的項目全部都是用Tornado編寫的,但我已經加入了一些Twisted來處理異步XML-RPC。我想知道是否可以使用Tornado的gen.engine並用Twisted的代碼生成gen.Task。這可能嗎?如果是的話,語法如何?提前致謝。是否有可能使用龍捲風的gen.engine和gen.Task與扭曲?
2
A
回答
4
當然 - 但它被稱爲inlineCallbacks
在扭曲:
from twisted.internet.defer import inlineCallbacks
@inlineCallbacks
def foo():
x = yield bar()
print x
3
您可以使用gen.Task
有任何需要callback
關鍵字參數。但是,扭曲式代碼通常會返回Deferred
而不是將回調作爲輸入。你需要將Deferred
換成tornado.gen
可以理解的東西(可能是Future
)。像這樣(未經測試):
def wrap_deferred(deferred):
# Could also use concurrent.futures.Future from the standard library,
# but Tornado's version gives better tracebacks on python 2.
future = tornado.concurrent.TracebackFuture()
deferred.addCallbacks(future.set_result, future.set_exception)
return future
@gen.coroutine
def my_coroutine(self):
# Use wrap_deferred instead of gen.Task
x = yield wrap_deferred(some_twisted_function())
0
我修改了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
扭曲渦卷異常作爲failure.Failure。 future.set_exception抱怨它不是一個異常類型。
相關問題
- 1. 區別於扭曲和龍捲風?
- 2. 簡單函數和龍捲風gen.engine
- 3. 使用龍捲風和扭曲的同時
- 4. 龍捲風芹菜不能使用gen.Task或回調
- 5. 什麼是扭曲相當於龍捲風的IOLoop.add_callback?
- 6. 與龍捲風
- 7. 與龍捲風
- 8. 龍捲風是否可以併發?
- 9. 在龍捲風中,是否有多個AsyncHTTPTestCase.fetch()可能?
- 10. 什麼是龍捲風ioloop和龍捲風的工作流程?
- 11. 扭曲/龍捲風等等如何工作
- 12. 使用龍捲風
- 13. 這是可能與捲曲?
- 14. 龍捲風和ZeroMQ
- 15. 龍捲風和PostgreSQL
- 16. 龍捲風和WTForms
- 17. 龍捲風和Django
- 18. 龍捲風和tornado.iostream.PipeIOStream
- 19. 如何實現與龍捲風的並行性gen.Task/gen.coroutine裝飾器
- 20. 龍捲風與Apache的django?
- 21. 不能與龍捲風服務器
- 22. 我怎麼能起到與龍捲風
- 23. 龍捲風性能評估
- 24. 龍捲風與參數
- 25. 龍捲風圖/圖與GGPLOT2
- 26. 開始與龍捲風
- 27. 龍捲風set_secure_cookie
- 28. 龍捲風IOLoop
- 29. 在龍捲風
- 30. 龍捲風request.body