@tornado.web.asynchronous
@tornado.gen.coroutine
@auth_token
@log_record
def post(self):
"""
bussiness_name
description
:return:
"""
resultCode = self.request.headers.get('resultCode', -1)
resultData = self.request.headers.get('resultData', {})
user_id = resultData['user_id']
token = None
data = {}
body = json.loads(self.request.body)
data['business_name'] = body['name']
data['system_user_id'] = body['user_id']
data['description'] = body['description']
remote_call_result = get_business_result.apply_async(args=["POST", user_id, data])
# response = remote_call_result.wait()
# self.on_post_result(response)
response = yield tornado.gen.Task(remote_call_result.wait())
self.on_post_result(response)
def on_post_result(self, response):
di_result = json.dumps(response)
logger.info("verify, result:%s \n" % di_result)
self.write(json.dumps(di_result))
self.finish()
代码如上,使用 yield gen.Task 无法获取获得的 response,celery 任务是一个 rpc call, 有什么方法可以异步来获取结果?
1
ray1888 OP 这里是一个 handler 上面的一个 post 方法
|
2
ray1888 OP 尝试过在 celery 的 apply_async 添加 callback=self.on_post_result,但是也无法运行收尾的 self.on_post_result
|
3
pabupa 2018-07-09 21:51:10 +08:00
yield future
|
4
ray1888 OP @pabupa yield remote_call_result 这里应该没有用吧?因为 celery 的 Result 类是需要用 get 或者 wait 来获取返回值的结果
|
5
supervipcard 2018-07-13 08:51:06 +08:00
用 future,内部轮询获取结果
|