Plodit oddělený nit provedení (tj odesílání protokolu e-mailu Dev) v baňce Python?

hlasů
5

Jsem běží baňky webapp běží za uwsgi (2 procesy). Část mého kódu spočívá v použití příkazu ping vzdáleného zdroje, vidí-li, že byl změněn ( If-Modified-Since), a aktualizuje lokální kopii tohoto zdroje na webový server, pokud změněn.

Že aktualizace také pošle sám email o diff. Obávám se, že to trvá dlouho, což uživatel požaduje časového limitu při odesílání e-mailu.

Je threading knihovny Python správný způsob, jak řešit to? (plodit vlákno a poslat e-mail, že?) Bude to v rozporu s procesy uwsgi to vůbec?

Děkuji za pomoc!

(Vedlejší poznámka: Jsem také trochu obavy z 2 uwsgi procesů narážela hlavu v případě, že oba se snaží aktualizovat zdroj na místní kopii ... Zajímalo by mě, jestli zámek schopnosti se od závitu Modul je ta správná věc podívat se na dobu tento problém také?)

EDIT: K objasnění, mým hlavním zájmem je, že e-mailová úloha je součástí spuštění kódu. To trvá dlouhou dobu a běží před return_templatevýzvou, proto zvedl odpověď uživatele. Je Python threading knihovny správný způsob, jak řešit tento problém, vzhledem k Flask / uwsgi prostředí?

Položena 15/09/2011 v 22:56
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
6

Nejlepším řešením pro tento druh práce je pomocí uWSGI spooler. Chcete-li spustit úkoly na určitých intervalech můžete použít @timer dekoratér a nechte zařazovací k tvrdé práci:

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()
Odpovězeno 16/09/2011 v 05:06
zdroj uživatelem

hlasů
2

Při pokusu o vytvoření nezávislé aplikace serveru (například pokud máte na mysli nahradí uWSGI s Gunicorn novější), bych doporučil používat celer .

Zde jsou první kroky: http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html

Odpovězeno 16/09/2011 v 07:45
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more