class ProductDetailHandler(BaseHandler):
async def get(self):
_id = self.get_argument('id')
product = await mgo.product.find_one({'_id': ObjectId(_id)})
sku = await mgo.sku.find({'pid': _id}).to_list(None)
seller = await mgo.user.find_one({'_id': product['seller_id']})
product['seller'] = seller['name']
product['sku'] = sku
self.write({'err_code': 0, 'data': product})
像网上找的这个例子, 有一点小疑问, 这里本身 get() 就是一个协程函数了吧? 里面再开三个的话, 它自身不就是等于没事做了吗? 这算不算一种资源浪费?
1
zhuangzhuang1988 2019-12-23 17:16:17 +08:00
|
2
wzwwzw 2019-12-23 18:43:02 +08:00
await 会把 cpu 资源让出来。
|
3
keepeye 2019-12-23 19:01:43 +08:00
asyncio.ensure_future 可以不用 await
|
4
CzaOrz 2019-12-23 20:34:10 +08:00 1
好像是 tornado~,你说的再开三个是指三次`await`,但是后面我没懂。
三次`await`就是三次`中断`,每次中断都有注册`任务`添加到`期程`的操作。注册后会释放 CPU 资源,之后就是等待或者执行其他已完成的`任务`,所以并没有浪费资源,整个流程没有线程的切换,效率高。而任务什么时候完成,由操作系统调度通知。 |
5
aoscici2000 OP @CzaOrz 大概懂了, 谢谢哈
|
6
676529483 2019-12-23 22:44:02 +08:00
单次调用肯定没区别啊,执行次数越多,优势越大
|