Ich möchte eine asynchrone Funktion ausführen, immer wenn die Kolbenroute ausgeführt wird. Derzeit wird meine abar-Funktion nie ausgeführt. Kannst du mir sagen warum? Vielen Dank:Python3 Asyncio-Aufruf von Flask Route
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()
Ich versuchte es auch den einen blockierenden Aufruf in einem separaten Thread zu setzen. Aber es ruft immer noch nicht die Abar-Funktion auf.
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' und' loop.run_forever' blockieren beide. Sie sind wahrscheinlich besser dran mit einem Thread. Wenn Sie _need_ benötigen, um asyncio zu verwenden, sollten Sie in eines der Flask-artigen Frameworks schauen, die darauf aufgebaut sind. – dirn
@dim Vielen Dank. Ich habe versucht, eine Blockierung in einen separaten Thread zu verschieben. S. meine bearbeitete Frage! – user24502