Есть программа, в ней раздел "Моделей" и "Модель_то_БД", планировался следующий вариант написания программы,
в моделях описываем "Классы", в папку "Модели_то_БД" помещаются статически классы CRUD, для указанной модели, далее реализуем FastApi для моделей, тут все хорошо, но необходимо также реализовать отдельный "Поток", для фоновой работы с данными из внешнего источника, вот тут все сломалось, так как из потока я не могу достучатся до "Глобального хранилища переменных(строк подключения)" из потока, не хочется тащить копии функционала в код потока, а использовать специально для этого разработанный функционал в одном месте, дергать функционал через FastApi не хотелось бы, есть ли варианты?
PS на текущий момент один поток, но в будущим их может быть несколько.
Во-первых, стоило бы переименовать вопрос в "Как в FastAPI работать с базой из потока". Во-вторых, обычно в web-приложениях на Python фоновые задачи выполняют чем-нибудь вроде Celery, а не потоками.
Сергей Горностаев, Изначально была задача разработать модели и их хранение, потом, к этим моделям прикрутил FastAPI, для написания ВэбИнтерфейса, в будущем, и сейчас необходимо используя имеющий феккционал задействовать в процессе(потоке), для выполнения переодических работ, строить выполнение потока на вызове своего же API, мне кажется не очень правильным подходом.
Зависит от базы. Если это нормальная БД типа постгре, то может быть проще завести отдельное подключение для фоновой задачи.
А вот если это SQLite... тут намучаешься.
ИМХО, потоки использовать на веб-сервере, а так же какую либо обработку "тяжелых" данных не хорошая практика. Ваша реализация работает с потоками только по причине GIL, так как он блокирует использование общих ресурсов. Но ка только на вашем веб-сервере станет больше пользователей или увеличится время исполнения фоновой задачи в потоке то появятся лаги у пользователей.
Так как по сути в питоне исполняется всего один поток и если ваша задача в потоке процессорозависимая то клиенты будут долго ждать ответа от вэбсервера который в свою очередь будет ждать очереди на выполнение, а GIL не будет отпускать прошлую задачу.
В общем и целом. Запускайте ваши задачи через Фастапи + Celery. Через DI насколько я помню можно всегда дернуть коннекшен к БД, а Celery уже сама организует пулл процессов для выполнения задач.