Chcę wykonać funkcję async za każdym razem, gdy jest wykonywana trasa kolby. Obecnie moja funkcja abar nie jest nigdy wykonywana. Czy możesz powiedzieć mi dlaczego? Dziękuję bardzo:Python3 Asyncio wywołanie z 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()
Próbowałem ją również umieścić jeden blokowania połączeń w oddzielnym wątku. Ale wciąż nie wywołuje funkcji 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' i' loop.run_forever' są zarówno blokujące. Prawdopodobnie lepiej jest użyć wątku. Jeśli chcesz użyć asyncio, powinieneś zajrzeć do jednego z frameworków podobnych do Flask. – dirn
@dim Dziękuję bardzo. Próbowałem przenieść jedno blokowanie do osobnej nici. S. moje edytowane pytanie! – user24502