表示昨天找了很多文章,都说了些怎么用异步,却没有提到异步的精髓,比如future
,@tornado.web.asynchronous
和@gen.coroutine
装饰器,搞得现在都不知道从哪儿开始看了,看过这部分源码的提个建议呗。
1 wuxc 2016-12-06 09:02:35 +08:00 从第一个版本开始看,还是挺好懂的。 https://github.com/tornadoweb/tornado 顺便安利下我用为了看这个的写的个小工具 https://github.com/wuxc/gitjump |
![]() | 2 Ahri 2016-12-06 09:22:36 +08:00 这个已经过时了,现在都用 asyncio 。 |
![]() | 3 ericls 2016-12-06 09:22:44 +08:00 手动写一个 event loop 来实现同样的效果 |
![]() | 8 zhuangzhuang1988 2016-12-06 10:10:45 +08:00 future 这个最好看别的语言的, C#的 task, java 的 Future @tornado.web.asynchronous 记得开始的时候这个就是简单个标志, 让函数结束的时候不关闭 socket, 可以继续传输数据 @gen.coroutine 这个看 http://aosabook.org/en/500L/a-web-crawler-with-asyncio-coroutines.html http://www.dabeaz.com/coroutines/index.html 这 2 个 |
9 ansheng OP @zhuangzhuang1988 英文能力太差。 |
![]() | 10 p2p 2016-12-06 10:55:18 +08:00 阅读下 tornado 2.* 版本的异步实现的源码 |
![]() | 11 sujin190 2016-12-06 10:58:52 +08:00 ![]() Future 简单来说就是一个一个的状态,一连串的 Future 就构成了整个的调用链,类比于函数调用链,区别只是函数是用栈来保存转态的, event loop 监听 io 变更转化为事件通过 yield 的关键字产生的入口变更 Future 状态的变更,转而又引发一连串 Future 状态变更, Future 状态的变更又会产生 io 操作,整个循环就完成了。 |
12 zenliver 2016-12-06 11:17:36 +08:00 ioloop, iostream, gen 看完这 3 个模块源码, 估计用 tornado 不会遇到 hold 不住的问题了 |
![]() | 15 fy 2016-12-06 11:33:25 +08:00 看官方文档和 examples ,同时看最新的。 这个也是改过几次了,看网上文章基本不靠谱的,各种时间段都有,还来回转载。 |
![]() | 16 jy01264313 2016-12-06 11:49:25 +08:00 推荐看一下 POSIX 标准 IO |
![]() | 18 herozem 2016-12-06 13:00:59 +08:00 |
19 songco 2016-12-06 16:04:23 +08:00 这块比较简单的我记得是 redis 的网络模块(我当年看的老版本, 新版本应该变化不大).... c 语言的, 有个好处是比较接近底层 |
20 HFcbyqP0iVO5KM05 2016-12-07 10:26:38 +08:00 via Android 500 Lines 里面有一个 IO 异步爬虫的实现,把那个读一下可以了解一些基本的东西 |