在方法1中,我希望先执行try块,然后执行call_ordercreate方法,使用asyncio尝试,但得到错误输出,如描述所示,如何解决此问题
方法#1
@app.route("/slack/message_actions", methods=[ "POST" ])
def message_actions():
if (payload[ "type" ] == "view_submission" and payload[ "view" ][ "callback_id" ] == "sthpush"):
print("entered push")
call_ordercreate(thread_ts, user_name) **# Run this method after executing try block**
try:
return jsonify(
{
"response_action": "push",
"view": orderwaitmessage,
}
)
except SlackApiError as e:
code = e.response[ "error" ]
return make_response(f"Failed to open a modal due to {code}", 200)
方法#2
async def call_ordercreate(thread_ts, user_name):
await asyncio.sleep(4)
url_list1 = CONST_ORDERCREATE_API
r = requests.get(url)
错误输出
C:/Users/PycharmProjects/iptautobot-events/newapp.py:263: RuntimeWarning: coroutine 'call_ordercreate' was never awaited
call_ordercreate(thread_ts, user_name)
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
这里的问题是,您试图从一个正常的同步函数调用一个异步函数。您应该使用^{} 方法来运行该函数。这不会引起
RuntimeWarning
。因此,您的代码将如下所示:然而,您似乎希望在将响应返回给用户之后运行
call_ordercreate
。恐怕这是不可能的,因为一旦您return
,整个请求上下文就会被破坏。此外,flask(我假设它是flask)是一个WSGI服务器,这意味着它以同步方式处理请求。这就是为什么使用asyncio.run
是调用异步函数的唯一方法。缺点是什么?它等待任务完成,而这绝对不是您想要实现的相关问题 更多 >
编程相关推荐