tornado异步请求

Python的web框架五花八门.大而全的框架Django,小巧的框架如web.py,flask等.以异步著称的tornado等等.

这里记录一下tornado编写异步请求程序的例子.

首先要知道,要想整个web服务是异步的,前提条件是你的各个耗时操作是异步的才行.如果你的操作是一个sleep(),由于tornado本身是单进程单线程的,那么你整个进程就被sleep()阻塞了.

一个典型的tornado异步方法编写如下:

以上代码中,由于AsyncHTTPClient自身是可以异步化.说白了,在linux上就相当于在epoll中注册了一个网络事件,只有当这个网络事件真正有数据产生时,我们的程序才把数据给读出来,其他时间我们的程序可以做自己的事情,网络IO交给操作系统去完成.

但是,如果操作本身比较耗时,又无法异步化,比如下面的代码,无论你你怎么装饰,整个进程都是阻塞的:

对于以上这种应用场景:即操作本身比较耗时,又无法异步化,那该怎么处理呢?

我们可以使用多线程的方式来执行.从而避免tornado的进程被阻塞.

如此一来,tornado主进程就不会被耗时操作阻塞了.

(完)

4 Likes

Loading ....
  • code 评论于2017-03-25 17:00 回复

    多谢分享

你目前的身份是游客,评论请输入昵称和电邮!