异步服务和协程
一般代码的同步执行
阻塞的问题
异步解决的问题:
异步处理可以让应用在长时间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))
浙公网安备 33010602011771号