异步服务和协程

一般代码的同步执行

阻塞的问题

异步解决的问题:

异步处理可以让应用在长时间api和数据库请求中避免阻塞的时间耗费,最终更快地服务更多请求

注意:

异步代码增加了复杂度,只在特定的

 

应用异步

  先从同步版本开始

  pip install requests

  增加一个保存url图片的功能

  handler和路由

  使用协程coroutine

tronado的异步模块

  tornado.gen.coroutine+yield

  tornado.httpclient.AsyncHTTPClient

 

异步的类代码

import requests
from tornado.httpclient import AsyncHTTPClient
from tornado.gen import coroutine
from .main import BaseHandelr
from utils.photo import UploadImage
class AsyncSaveHandler(BaseHandelr):
@coroutine
def get(self):
save_url = self.get_argument('save_url', '')
print(save_url)

client = AsyncHTTPClient()
resp = yield client.fetch(save_url)

up_img = UploadImage('x.jpg', self.settings['static_path'])
up_img.save_upload(resp.body)
up_img.make_thumb()

post_id = self.orm.add_post(up_img.image_url,
up_img.thumb_url,
self.current_user)

self.redirect('/post/{}'.format(post_id))
posted on 2019-05-28 15:22  python兵者  阅读(437)  评论(0)    收藏  举报