Zpomalena aplikace pri cronu
- Duch.Veliky
- Člen | 68
Zdravím,
mám problém. Napsal jsem si script do cronu, který každých 5 minut vytáhne 50 mailových adres a rozešle jim newsletter. To samo o sobě je v pohodě, akorát že problém je, že jsem to napsal normálně jako součást aplikace (např na adrese /mailing/rozeslat) a když ten script běží (což běží třeba 10–20 vteřin) tak v ten okamžik se jakoby celá aplikace „zamrzne“ a jde hrozně zpomaleně, dokud ten script nedoběhne. Jakoby nette mělo nějakou ochranu, že když se jednomu nenačte script, tak dalšímu se nezapne.
Nevím, jestli jsem to logicky popsal. Napadá Vás, jak to vyřešit? Samozřejmě nejsnažší řešení je dát ten cron stranou a nedávat ho jako součást aplikace, ale to jsem zrovna nechtěl…
- David Matějka
- Moderator | 6445
a ten script uz spousti cron, nebo to nejak testujes rucne? pak by totiz mohlo dojit k blokovani session.
- Duch.Veliky
- Člen | 68
Teď už ho spouští cron a když ho zapne, tak to lze poznat podle toho, že web se pořádně nenačte dokud nedoběhne.
- Duch.Veliky
- Člen | 68
Působí to prostě jako kdyby Nette vždycky generovalo cache pro prvního návštěvníka a dokud nedoběhne ten jeho script, tak ostatní návštěvníci musejí čekat. Je to záhada :)
- David Matějka
- Moderator | 6445
Ano, na nekterych mistech nette zamkne aplikaci a ceka na vygenerovani cache – prikladem je generovani containeru. ale po vygenerovani dojde k uvoleneni zamku.
nepouzivas treba nekde nejak spatne konkurencni cachovani ? nebo nezamykas tabulky v mysql?
bylo by dobre zkusit odmazat co nejvice kodu (a nahradit ho treba jen za
sleep(20)
) a pokusit se zjistit, jestli to opravdu zpusobuje nette
nebo tvuj kod..
- Duch.Veliky
- Člen | 68
No dal jsem tam sleep(30) místo celýho scriptu a 30 vteřin nešla načíst aplikace. Až když uběhlo 30 vteřin a tamten script doběhnul, tak se načetla.
- David Matějka
- Moderator | 6445
@Duch.Veliky to radeji provadej v anonymnim okne nebo v jinem prohlizeci, jinak ti to budou blokovat session…
- iguana007
- Člen | 970
@Duch.Veliky – proto jsem se tě na to ptal, je to přesně jak
říká @matej21 ;)
Hoď si to na server – dej si tam hodně dlouhý sleep – a uvidíš, že
zatímco se ti spustí cron, tak v browseru se ti ta stránka normálně
načte – pokud tam tedy opravdu nemáš nějaký závažnější problém
v návrhu aplikace.
- Duch.Veliky
- Člen | 68
Jo máte oba pravdu, v anonymnim okně to jede, takže to blokovala session. Tak to znamená, že to musí dělat ten script, i když jenom sáhne pro 50 záznamů z databáze kde jich je 17tisíc, rozešle 50 mailů a potom 50× provede update že tomu konkrétnímu uživateli už to bylo odesláno. Je to divný. Nějak to ještě pošteluju :)
díky
- iguana007
- Člen | 970
Myslím, že obdoba tvého problému, ne-li totéž se řeší teď na
Devel.cz, tak si to projdi ;)
http://devel.cz/…erveru-nette
Editoval iguana007 (5. 9. 2014 16:56)