Hey, As far as I know (might be old news) flask does not support asyncio.
You would have to use a different framework, like e.g. FastAPI or similar. Maybe someone has already written "flask with asyncio" but I don't know about that. Cheers Lars Lars Liedtke Lead Developer [Tel.] +49 721 98993- [Fax] +49 721 98993- [E-Mail] l...@solute.de<mailto:l...@solute.de> solute GmbH Zeppelinstraße 15 76185 Karlsruhe Germany [Marken] Geschäftsführer | Managing Director: Dr. Thilo Gans, Bernd Vermaaten Webseite | www.solute.de <http://www.solute.de/> Sitz | Registered Office: Karlsruhe Registergericht | Register Court: Amtsgericht Mannheim Registernummer | Register No.: HRB 748044 USt-ID | VAT ID: DE234663798 Informationen zum Datenschutz | Information about privacy policy https://www.solute.de/ger/datenschutz/grundsaetze-der-datenverarbeitung.php Am 20.03.24 um 09:22 schrieb Thomas Nyberg via Python-list: Hello, I have a simple (and not working) example of what I'm trying to do. This is a simplified version of what I'm trying to achieve (obviously the background workers and finalizer functions will do more later): `app.py` ``` import asyncio import threading import time from queue import Queue from flask import Flask in_queue = Queue() out_queue = Queue() def worker(): print("worker started running") while True: future = in_queue.get() print(f"worker got future: {future}") time.sleep(5) print("worker sleeped") out_queue.put(future) def finalizer(): print("finalizer started running") while True: future = out_queue.get() print(f"finalizer got future: {future}") future.set_result("completed") print("finalizer set result") threading.Thread(target=worker, daemon=True).start() threading.Thread(target=finalizer, daemon=True).start() app = Flask(__name__) @app.route("/") async def root(): future = asyncio.get_event_loop().create_future() in_queue.put(future) print(f"root put future: {future}") result = await future return result if __name__ == "__main__": app.run() ``` If I start up that server, and execute `curl http://localhost:5000`, it prints out the following in the server before hanging: ``` $ python3 app.py worker started running finalizer started running * Serving Flask app 'app' * Debug mode: off WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Running on http://127.0.0.1:5000 Press CTRL+C to quit root put future: <Future pending> worker got future: <Future pending cb=[Task.task_wakeup()]> worker sleeped finalizer got future: <Future pending cb=[Task.task_wakeup()]> finalizer set result ``` Judging by what's printing out, the `final result = await future` doesn't seem to be happy here. Maybe someone sees something obvious I'm doing wrong here? I presume I'm mixing threads and asyncio in a way I shouldn't be. Here's some system information (just freshly installed with pip3 install flask[async] in a virtual environment for python version 3.11.2): ``` $ uname -a Linux x1carbon 6.1.0-18-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.76-1 (2024-02-01) x86_64 GNU/Linux $ python3 -V Python 3.11.2 $ pip3 freeze asgiref==3.7.2 blinker==1.7.0 click==8.1.7 Flask==3.0.2 itsdangerous==2.1.2 Jinja2==3.1.3 MarkupSafe==2.1.5 Werkzeug==3.0.1 ``` Thanks for any help! Cheers, Thomas -- https://mail.python.org/mailman/listinfo/python-list