class Handler:
def get(self):
res_a = self.get_a(*args)
res_b = self.get_b(*args) # => cost 1s
self.write({"res": res_a + res_b})
def get_a(self, *args):
res = {}
a1 = self.get_a1(*args) # => cost 2s
a2 = self.get_a2(*args) # => cost 3s
res.update(a1)
res.update(a2)
return res
def get_b(self, *args):
pass
现在 tornado 代码是这么个流程,几个调用耗时的方法,都是 io 问题(读 es,且不可能安装异步的 es 客户端包),这种情况下,整个服务性能特别低,用 async 装饰耗时函数,但是也各种报错,没有找到解决办法。网上看 asyncio,executor 也是没有头绪,因为 get_a 方法,如果起多线程,应该可以保证 3s 就返回,而 get 函数,总共也是可以 3s 就返回的,包括异步客户端也一样。现在这么一写,多耗费了 1 倍的时间...
所以,大佬们有什么解决方法么,或者改看哪方面知识么,求告知 😂
以下为报错问题的代码及报错
class Handler:
async def get(self):
res_a = await self.get_a(*args)
res_b = self.get_b(*args) # => cost 1s
self.write({"res": res_a + res_b})
async def get_a(self, *args):
res = {}
a1 = await self.get_a1(*args) # => cost 2s
a2 = self.get_a2(*args) # => cost 3s
res.update(a1)
res.update(a2)
return res
async def get_a1(self):
res = await ...
return res
def get_b(self, *args):
pass
# Error
# object list can't be used in await expression )
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.