Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> dlugi czas wykonywania skryptu + przekierowanie
andycole
post
Post #1





Grupa: Zarejestrowani
Postów: 71
Pomógł: 1
Dołączył: 14.12.2004

Ostrzeżenie: (0%)
-----


Witam,

Mam skrypt do wysylki mailingu.
Baza maili moich uzytkownikow liczy ponad 22 tysiace, wiec radze sobie tak:

set_time_limit(300);
pobierz 80 maili sposrod tych do ktorych jeszcze nie wyslano
jezeli sa maile to
w petli
wyslij i zapisz, ze wyslano
sleep(3);
header(odswiezenie strony)
jezeli nie ma juz maili
header(strona glowna wysylki mailingu)

I problem tkwi w tym, ze zawsze po ok 3 minutach (+/- 200 sekund) wywala mi w przegladarce:

Kod
Nieprawidłowe przekierowanie
Firefox wykrył, że serwer przekierowuje żądanie tego zasobu w sposób uniemożliwiający jego ukończenie.


Czy po przekierowaniu header czas wykonania skryptu nie liczony jest na nowo?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Pilsener... Pogadaj sobie o Cronie w sytuacji gdy masz limit skryptu 30 sekund + możliwość odpalania co 5 minut + setki tysięcy maili. Jeśli w ciągu 24h wyślesz wszystkim generowany indywidualnie mail to gratuluję (IMG:style_emoticons/default/biggrin.gif) Weź pod uwagę, że nieraz w paczce możesz posłać tylko około 100-200 maili zanim skończy się limit, co daje:

200*12(razy w ciągu godziny)*24(godziny)~=57.000 maili na dobę (IMG:style_emoticons/default/biggrin.gif)

Jak Ty chcesz ominąć ten problem przy wysyłce choćby 60.000 maili? (IMG:style_emoticons/default/winksmiley.jpg) Cron Ci tutaj może poskakać, bo 3.000 userów maila nawet nie wyślesz. Pomyślałeś o tym przypadku? Wtedy jesteś zmuszony używać wywoływania skryptu w postaci nie-cronowej i sam wymyślić metodę. Tak więc wyskakiwanie z "amatorszczyzną" w chwili gdy nie ma ktoś innej możliwości jest delikatnie mówiąc bezpodstawnym obrażaniem. Skrypt można wywołać cronem, ale musi się on wykonywać w tle i być odporny na limity czasu wykonania. Jeśli dobrze go napiszesz to pozostaje Ci jedynie odpalanie go z crona automatycznie o którejś tam godzinie. Poza tym dla Twojej wiedzy... Skrypt obsługujący tego typu jakoś codziennie o 2-3 w nocy odpala cron na serwisie jednym nad jakim sprawuje opiekę i jakoś nie miał ani razu problemu, maile zawsze do wszystkich dochodzą, a ja sobie spokojnie śpię w tym czasie i mam w nosie czy trwa to 5 minut czy 5 godzin. Może dla iluś tam tysięcy cron dałby radę, ale:
1. Uruchamiasz skrypt co 5 minut niezależnie czy są zadania do zrobienia czy nie, mój odpala się raz i leci do upadłego.
2. Nie masz pewności czy posłało wszystkie maile, a w moim wypadku nawet jeśli serwer padł w trakcie wysyłki, to następnej nocy skrypt i tak "nadrobi" zaległości automatycznie. bez ingerencji z mojej strony. Dodatkowo mogę go odpalać ręcznie z przeglądarki i zamknąć ją bez obawy o zatrzymanie skryptu ( poczytaj nieco to znajdziesz o ignore user abort )
3. Nie muszę ingerować w nic. A nawet jeśli obciążenie serwera będzie na tyle ogromne i skrypt zakończy się z powodu limitu czasu to śmiało wznawiam go kiedy chcę. Jest tak napisany, że podejmie pracę od miejsca przerwania. Czy zrobię to ręcznie czy napiszę w cronie by "na wszelki wypadek" robił to co X godzin jest nieistotne, bo nie wykona się jeśli nie ma nic do zrobienia. Potęga algorytmu nad prostym wklepaniem do harmonogramu: "Wykonuj co 5 minut". Bo wykonywanie skryptu z odstępem 20 sekund przez Y minut na serwerze z limitem czasu skrypty 30 sekund i cronem co 5 minut to zauważalny skok wydajności. Ty zrobisz 200 maili w cronie, a ja około 3000 w skrypcie. Widzisz różnicę czy nadal uważasz rozwiązanie za "prowizoryczną amatorszczyznę"? Ja znam tylko jeden serwis z cronem co minutę. Znasz jakiś, który posłałby kilkaset tysięcy generowanych indywidualnie maili (treść jest generowana na podstawie konfiguracji ustawianych przez usera z poziomu jego panelu newslettera) z cronem co 5 minut i limitem skryptu 30 sekund? To jest matematycznie niemożliwe do wykonania co Ci udowodniłem ciut wyżej w podliczeniu. Które podejście nadal uważasz za sensowniejsze?

EDIT: Brak crona w przypadku serwisu też nie jest problemem. Ty proponujesz zdalne uruchamianie skryptu co ileś tam. Jest sens tego? Nie lepiej odpalić skrypt "raz a porządnie"?

Ten post edytował thek 18.12.2009, 13:22:55
Go to the top of the page
+Quote Post

Posty w temacie
- andycole   dlugi czas wykonywania skryptu + przekierowanie   5.12.2009, 15:57:22
- - darko   Pokaż kod, zgaduję, że robisz przekierowanie do te...   5.12.2009, 16:02:25
- - andycole   Skrypt jest przydlugawy, ale jest jak mowisz, do t...   5.12.2009, 16:04:23
- - darko   set_time_limit ($nowy_czas_w_sekundach) lub i...   5.12.2009, 16:10:23
- - andycole   wczesniej mialem set_time_limit(600); ale nie dzia...   18.12.2009, 00:22:12
- - thek   Ja robię to w sposób "oflagowany". Wybie...   18.12.2009, 09:48:28
- - Pilsener   A po co jakiś header, sleep itp. Nie prościej użyć...   18.12.2009, 10:24:27
- - andycole   Dzieki za konkretne odpowiedzi. Co do flag, zamia...   18.12.2009, 11:40:24
- - Pilsener   Wszystko zależy od tego, czy Twój hosting daje Ci ...   18.12.2009, 12:20:25
- - andycole   Mam VPS'a,   18.12.2009, 12:27:00
- - thek   Pilsener... Pogadaj sobie o Cronie w sytuacji gdy ...   18.12.2009, 13:15:07
- - Pilsener   Ale przecież sam napisałeś Cytatmasz limit skryptu...   19.12.2009, 00:25:41
- - andycole   Dajcie juz spokoj thek, powiedz mi lepiej jak prz...   19.12.2009, 02:33:56
- - darko   Zawsze możesz zrobić jeszcze tak: 1. sprawdzić ile...   19.12.2009, 03:05:41
|- - andycole   Cytat(darko @ 19.12.2009, 03:05:41 ) ...   19.12.2009, 10:46:29
- - Thorang Hoog   Cytat(andycole @ 19.12.2009, 10:46:29...   20.12.2009, 15:11:49
|- - andycole   Cytat(Thorang Hoog @ 20.12.2009, 15:11...   20.12.2009, 15:36:51
|- - jajcarzd1   Cytat(Thorang Hoog @ 20.12.2009, 16:11...   22.12.2009, 11:59:41
- - kacka   Pamiętaj tylko że mailing takiej ilości wiadomości...   20.12.2009, 15:21:49
- - Thorang Hoog   Cytat(andycole @ 20.12.2009, 15:36:51...   20.12.2009, 21:15:14
- - za017   Przeglądarki blokują powtarzające się polecenia pr...   21.12.2009, 08:01:07
- - andycole   za017, "pomógł". Twój pomysł i skrypt po...   22.12.2009, 21:02:24
- - za017   Dzięki za plusik. To duża satysfakcja, że coś zrob...   23.12.2009, 08:41:16


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 7.10.2025 - 00:10