Ответы пользователя по тегу Асинхронное программирование
  • Как разобраться с многопоточностью и асинхронностью в веб-приложении?

    romesses
    @romesses
    Backend инженер
    1a) https://stackoverflow.com/a/38876915
    подробнее о режиме поточности

    As of Flask 1.0, the WSGI server included with Flask is run in threaded mode by default.

    Prior to 1.0, or if you disable threading, the server is run in single-threaded mode, and can only handle one request at a time. Any parallel requests will have to wait until they can be handled, which can lead to issues if you tried to contact your own server from a request.

    With threaded=True requests are each handled in a new thread. How many threads your server can handle concurrently depends entirely on your OS and what limits it sets on the number of threads per process. The implementation uses the SocketServer.ThreadingMixIn class, which sets no limits to the number of threads it can spin up.

    Note that the Flask server is designed for development only. It is not a production-ready server. Don't rely on it to run your site on the wider web. Use a proper WSGI server (like gunicorn or uWSGI) instead.

    1b) Насчет ограничений Sqlite: попробуйте, как указано в https://stackoverflow.com/a/26630550

    2-3) для построения графиков воспользуйтесь очередями. Учтите, RQ работает только на POSIX-совместимой ОС (WSL на Windows). Воркеры очередей так и работают - на отдельных процессах. Из Flask кладут в очередь, а в воркере - берут из нее. И так для каждого графика или другой задачи - просто класть задачу в очередь и продолжать далее. В сообщении задачи нужно указать идентификатор и параметры для построения графика, а также все, что вам потребуется для дальнейшего занесения данных в БД.

    пока не поздно, есть ли смысл развивать проект на Flask, или мне взять многопоточный фреймворк типа FastAPI, aiohttp и т.п.? Что посоветуете?
    Попробуйте с очередями сначала. У вас же не тысячи пользователей, похоже.
    Ответ написан
    2 комментария