能解释一下tornado.gen.coroutine代码中的这段注释吗?
.. warning::
When exceptions occur inside a coroutine, the exception
information will be stored in the `.Future` object. You must
examine the result of the `.Future` object, or the exception
may go unnoticed by your code. This means yielding the function
if called from another coroutine, using something like
`.IOLoop.run_sync` for top-level calls, or passing the `.Future`
to `.IOLoop.add_future`.
对于This means yielding the function if called from another coroutine
这句意思不是很懂。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
首先,你要理解什么是coroutine, 一般认为(xx)routine是一个轻量级的线程,比如golang是goroutine,有些更小众的语言甚至直接叫process比如erlang,但这里的进程、轻量级线程都是派生于操作系统之上的,也就是位于pthread之上的一个抽象概念。
有的操作系统提供这种原生的支持,比如windows的fiber,线程和他们的重要区别是前者的调度和切换由操作系统代为进行,后者需要调用者或者是语言设计者自己去切换或管理,具体的实现的时候,稍微有点差别,但大体意思一致。
见这里
https://www.zhihu.com/question/21483863
Python也能模仿着实现自己的routine,也就是coroutine,主要通过python的yield来实现。传送,见这里
http://blog.csdn.net/xiaobing_blog/artic...
见下面的代码
原文中的意思是从一个coroutine里调用另外一个coroutine,如果没有用yield的方法的话,是抓不到最下面的那个myRoutine的异常的,如果myRoutine要检查是否有异常的话,必须使用下面的2种方式之一:
1) yield的方式
2) 最外面使用run_sync包装,见下面