フラスコのルートが実行されるたびに非同期関数を実行します。現在、私のabar関数は決して実行されません。なぜか教えてくれますか? はありがとうございました:FlaskルートからのPython3 Asyncio呼び出し
import asyncio
from flask import Flask
async def abar(a):
print(a)
loop = asyncio.get_event_loop()
app = Flask(__name__)
@app.route("/")
def notify():
asyncio.ensure_future(abar("abar"), loop=loop)
return "OK"
if __name__ == "__main__":
app.run(debug=False, use_reloader=False)
loop.run_forever()
私は別々のスレッドで1つのブロッキング呼び出しを入れても、それを試してみました。しかし、それでもabar関数は呼び出されていません。あなたは、この印刷表示されません同じ理由で
import asyncio
from threading import Thread
from flask import Flask
async def abar(a):
print(a)
app = Flask(__name__)
def start_worker(loop):
asyncio.set_event_loop(loop)
try:
loop.run_forever()
finally:
loop.close()
worker_loop = asyncio.new_event_loop()
worker = Thread(target=start_worker, args=(worker_loop,))
@app.route("/")
def notify():
asyncio.ensure_future(abar("abar"), loop=worker_loop)
return "OK"
if __name__ == "__main__":
worker.start()
app.run(debug=False, use_reloader=False)
'app.run'と' loop.run_forever'の両方がブロックされています。おそらくスレッドを使う方が良いでしょう。 asyncioを使用する必要がある場合は、その上に構築されたFlaskのようなフレームワークの1つを調べる必要があります。 – dirn
@dimありがとうございました。私は1つのブロックを別のスレッドに移動しようとしました。 S.私の編集した質問! – user24502