写习惯了 Node.js 和 Promise ,现在换到 python 突然有点不适应。用 tornado 框架,发现其实仍然是阻塞的。所以说有没有能像 node.js 写 promise 这样的方法来写异步呢?或者说应该用另外的方法来优化?
1
messense 2015-11-15 12:38:58 +08:00 1
|
2
abcdabcd987 OP @messense 可以它例子里面的 AsyncHTTPClient 本身就是一个异步的函数了诶,对于那些只提供了同步版本的函数怎么办呢?
实在不行就只能手写用户态线程了囧 |
3
gamexg 2015-11-15 12:54:31 +08:00 via Android 1
不熟悉 nodejs , python Gevent 可以不改代码直接将多线程阻塞改为协程非阻塞模式。
|
4
abcdabcd987 OP @gamexg thx 我去查下
|
5
love 2015-11-15 13:11:15 +08:00
用 python 3.5 的话可以试试 asyncio , python 的下一代语言级异步框架,及这类框架 http://aiohttp.readthedocs.org/en/stable/
|
6
ethego 2015-11-15 13:14:17 +08:00
tornado 可以开 gevent ,话说 python2 下啥框架和 gevent 一起使用都可以做到协程非阻塞
|
7
abcdabcd987 OP |
8
ethego 2015-11-15 13:26:24 +08:00
python3.4 已经支持 asynco 了,不过貌似还没有基于 asynco 的 web 框架,需要手动造轮子。在并发不高的时候协程非阻塞本来就不见得比不用协程快吧,协程提升的只是在并发较高的时候的性能。
|
9
ethego 2015-11-15 13:27:01 +08:00
asyncio ,打了两遍居然都打错了。。
|
10
ethego 2015-11-15 13:28:12 +08:00
你人工制造一个阻塞,开 gevent 和不开就能看出差别。
|
11
abcdabcd987 OP @ethego 如果是等待数据库查询这样的阻塞(数据库 cpu 没有跑满), gevent 能优化掉么?
|
12
ethego 2015-11-15 13:50:40 +08:00
@abcdabcd987 这当然可以啊
|
13
love 2015-11-15 13:50:41 +08:00
@abcdabcd987 3.4 也可以的, 这个框架也支持 3.4 。
@ethego http://aiohttp.readthedocs.org/en/stable/ 这不是嘛,我就在用在 3.4 上。 |
14
ethego 2015-11-15 13:53:20 +08:00
@love 看了下这不是 web 框架啊,只是提供了 http server/client 的库,和 HTTPResponse 的作用一样,离框架还远。
|
16
ethego 2015-11-15 14:02:06 +08:00
|
17
love 2015-11-15 14:10:58 +08:00
@ethego 你真看了? 这是什么? http://aiohttp.readthedocs.org/en/stable/web.html
|