Как лучше работать с вычислительными задачами и потоками во Flask?

В некотором экшене во Flask отправляется JSON с порядка 25 элементов-строк для анализа тональности текста. Анализ представляет из себя вычислительную задачу. Поэтому, для ускорения возврата результата автор создает количество потоков, соответствующее количеству элементов, запускает их и ждет при помощи цикла while:
for item in items:
    threading.Thread(target=self.analyze, args=(item, language)).start()

while None in self.items:
    time.sleep(0.02)

Не будучи гуру, я посоветовал заменить конструкцию цикла на использование .join(), на что автор отвечает, что иначе во Flask будет блокироваться основной поток. Я не знаю что на это ответить, поскольку не знаю как под капотом это работает.

Хорошая ли практика? Что посоветуете?
  • Вопрос задан
  • 83 просмотра
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Многопоточность
Седой и строгий
Во-первых, while блокирует воркер так же, как и join. Во-вторых, Flask не предназначен для многопоточности и её в нём следует избегать. Лучше использовать асинхронность или очередь задач.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы