Tornado之初学者(四)

六、异步

  同步:同步的意思就像是代码的顺序执行,当这一行的代码没有执行完时,就会一直等它,直到它执行完了再执行下一行,所以遇到耗时较长的代码行时,这行代码说不定就是整个程序的“锅”了;

  阻塞:当程序在某一处代码“停住”时,其他的代码就不能执行了,程序就阻塞在了此处了,比如同步的程序中卡在某行耗时长的代码时,这行代码就阻塞了后面代码的执行;

  异步:异步就像是你做你的,我不用等你,你做完了自然会往下执行,我还是自己做自己的,比如web中,当一个请求没有处理完时,程序还可以同时处理另一个请求,不用等你这请求处理完再来处理下一个请求,所以在访问者较多时,异步的优势就不言而喻了。

  Tornado的异步处理主要在以下几点(可以保持当前客户端连接不关闭,不必等当前请求处理完成后再处理下一个请求):

  1、异步装饰器@tornado.web.asynchronous:在web方法比如get上使用异步装饰器表明这是一个异步处理方法,被这个装饰器装饰的方法永远不会自己关闭客户端连接(Tornado默认在处理函数返回时自动关闭连接),必须使用finish方法手动关闭;

  2、异步HTTP客户端处理类tornado.httpclient.AsyncHTTPClient:

    1).AsyncHTTPClient的实例可以执行异步的HTTP请求;

    2).AsyncHTTPClient的fetch方法不会返回url的调用结果(HTTPResponse),而是使用了一个callback参数来指定HTTPResponse的处理方法,将HTTPResponse作为这个指定方法的参数传入进去进行相关的处理;

    3).在fetch方法的callback参数指定的处理方法的结尾处可以调用tornado.web.RequestHandler的finish方法来关闭客户端链接。

  3、异步处理模块tornado.gen:

    1).装饰器@tornado.gen.engine:告诉tornado被装饰的方法将使用tornado.gen.Task类;

    2).使用yield生成tornado.gen.Task类的实例,将我们想要的调用(比如:fetch方法)和需要传入该调用函数的参数传入这个Task实例:相比于第2点的fetch方法的callback回调功能将处理方法分成两个部分,这个异步生成器的好处在于,一是该请求的处理会在yield处停止执行,直到这个回调函数返回,但这并不会影响其他请求的处理,它依然是异步的,二是回调函数中可能还有回调函数,这样循环下去不容易维护,但是这个异步生成器可以让所有处理都在一个方法里,易开发和维护;

猜你喜欢

转载自www.cnblogs.com/guyuyun/p/8993301.html
今日推荐