gpt4 book ai didi

python - 运行时警告 : coroutine 'qr..confirm' was never awaited

转载 作者:行者123 更新时间:2023-12-03 16:48:17 26 4
gpt4 key购买 nike

我正在用 Flask 编写一个 webapp。在我的一条 route ,我有一个函数可以监听 API 并等待注册付款。该函数名为 confirm() .我在 render_template 中通过了如 confirm=confirm我使用 Jinja2 在页面上调用它:{{ confirm(cost) }}我已经意识到需要异步调用该函数,否则页面在付款之前不会加载。但是,我收到了需要等待该函数的名义错误。阅读后,我尝试将路线更改为 async def qr()但 Flask 不会加载它,所以我不确定如何 await在这种情况下应该使用。

async def confirm(cost):
json = { "action": "account_history", "account": app.config['NANO'], "count": 5, "raw": False, "reverse": False }
now = datetime.now()
delta = timedelta(seconds=60)
while datetime.now() < now+delta:
test = requests.post("https://nanoverse.io/api/node",json=json).json()
for item in test["history"]:
if item["amount"] == cost:
flash("Payment Received!")
break
else:
continue
break

最佳答案

才能使用Awaitable jinja2 模板中的对象,environment必须使用 enable_async 创建选项。
引用:https://jinja.palletsprojects.com/en/2.11.x/api/#async-support
要从 flask 中执行此操作,您需要通过 jinja_options 设置它在运行应用程序之前。像这样:

from flask import Flask

app = Flask(__name__)
app.jinja_options['enable_async'] = True
现在只剩下一个问题了。基于 AsyncSupport jinja2 的文档:

asyncio.get_event_loop() must return an event loop.Since flask creates a new Thread for each request there will be no evet_loop for jinja. So something like this must be done to get it working:


@app.route('/')
def example():
# ...
asyncio.set_event_loop(asyncio.new_event_loop())

return render_template('index.html', confirm=confirm)
谨慎对待如何提供事件循环。我不认为这是一种生产就绪的方法。这只是一个概念证明,用于演示它应该如何工作。我认为“为 flask 线程提供 event_loop 的最佳实践”是另一个问题。

关于python - 运行时警告 : coroutine 'qr.<locals>.confirm' was never awaited,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63417302/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com