Создание отдельного потока выполнения (т. Е. Отправка лога в dev) в Flask Python? - PullRequest
5 голосов
/ 16 сентября 2011

Я запускаю веб-приложение Flask, работающее за uwsgi (2 процесса). Часть моего кода включает в себя проверку связи с удаленным ресурсом, проверку его модификации (If-Modified-Since) и обновление локальной копии этого ресурса на веб-сервере в случае изменения.

Это обновление также отправляет мне электронное письмо от diff. Я обеспокоен тем, что это занимает много времени, в результате чего пользовательские запросы перестают работать при отправке электронного письма.

Является ли библиотека потоков Python правильным способом решения этой проблемы? (создать ветку и отправить туда письмо?) Будет ли это вообще мешать процессам uwsgi?

Спасибо за помощь!

(примечание: я также немного обеспокоен тем, что 2 процесса uwsgi сталкиваются с головками, если они оба пытаются обновить ресурс в локальной копии ... Интересно, правильные ли возможности блокировки потокового модуля посмотрите и на эту проблему?)

РЕДАКТИРОВАТЬ: Чтобы уточнить, моя основная проблема заключается в том, что задача электронной почты является частью выполнения кода. Это занимает много времени и выполняется до вызова return_template, поэтому задерживает ответ пользователя. Является ли библиотека потоков Python правильным способом решения этой проблемы, учитывая среду Flask / uwsgi?

Ответы [ 2 ]

6 голосов
/ 16 сентября 2011

Лучшее решение для такого рода задач - использование спулера uWSGI. Если вы хотите запускать задачи с определенным интервалом, вы можете использовать декоратор @timer и позволить спулеру выполнить тяжелую работу:

from uwsgidecorators import *

#this will execute the_task() every 30 seconds in the spooler
@timer(30, target='spooler')
def the_task(signum)
    do_the_long_task()
2 голосов
/ 16 сентября 2011

Если вы попытаетесь создать независимое от сервера приложение (например, если вы хотите заменить uWSGI на Gunicorn позже), я бы рекомендовал использовать Celery .

Вот первые шаги: http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html

...