tornado 异步非阻塞求解救

vhysug01


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 )
同一个项目不同模块需要使用不同版本的三方库,如何解决

1980744819:一个 tornado 中不同接口需要使用不同版本的 pytorch,并且互不兼容。 请问,如何保持在一个项目内使用不同版本的库呢,有什么比较好的解决方案? (最坏的情况只能把两个接口分开,但这种方式带来维护的难度,以及分散精力)

小程序云数据库是传值还是传址

lithium148:const promise =db.collection('todo').get() 请问 get()获取到的是表的值还是表的引用,是把表的值复制一遍还是只传递了地址? 谢谢!

无法requests.get()网站,“远程终端关闭的连接,无响应” - python

当我尝试向该网站发送请求时:import requests requests.get('https://www.ldoceonline.com/') 返回异常requests.exceptions.ConnectionError: ('Connection aborted.', RemoteDisconnected(&…

.get()之后,多处理陷入困境 - python

我试图了解multiprocessing如何在python中工作并遇到一些问题。这是示例:import multiprocessing def func(): return 1 p = multiprocessing.Pool() result = p.apply_async(func).get() 调用.get()函数时,代码只是卡住了。我究竟做错了什么?…

AJAX和file_get_contents - php

我有一个使用file_get_contents的脚本,然后解码返回的JSON ...$urlone = json_decode(file_get_contents("http://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=f…