Wywoływanie równolegle skryptu z różnymi parametrami |
Wywoływanie równolegle skryptu z różnymi parametrami |
2.12.2015, 13:42:23
Post
#1
|
|
Grupa: Zarejestrowani Postów: 898 Pomógł: 48 Dołączył: 2.11.2005 Skąd: Poznań Ostrzeżenie: (0%) |
Mam mały problem - moja aplikacja łączy się z zewnętrznym serwerem i pobiera/wysyła do niego dane. Tak więc w czasie gdy oczekuje odpowiedzi z serwera skrypt nic nie robi. Problem jest taki, że takich zapytań muszę wykonać kilka-kilkadziesiąt tysięcy w możliwie krótkim czasie.
Pomysł jest taki, że chciałbym uruchomić skrypt "równolegle" kilkukrotnie - taki pseudokod Oczywiście file_get_contents używam, jako przykład - w rzeczywistości będzie to wywołanie metody klasy, która odpowiada za łączność z serwerem. Powyższy pseudokod wykona się po kolei - ja chciałbym aby wszystkie te połączenia wykonały się równolegle - czyli, żeby drugie wywołanie nie czekało aż skończy się pierwsze itd. Ograniczenia jakie mam: - nie mogę używać skryptów cli - musi to działać w miarę standardowej konfiguracji serwera bez konieczności instalowania egzotycznych dodatków - skrypt główny musi być wywoływany z cron'a więc wszelkie javascriptowe sztuczki też odpadają Dodam, że skrypt będzie działał w oparciu o Symfony2 - może jest tam jakieś rozwiązanie pozwalające na to. |
|
|
2.12.2015, 13:50:08
Post
#2
|
|
Grupa: Zarejestrowani Postów: 915 Pomógł: 210 Dołączył: 8.09.2009 Skąd: Tomaszów Lubelski/Wrocław Ostrzeżenie: (0%) |
... Jak nie możesz używać skryptów CLI to co chcesz odpalać z crona?Ograniczenia jakie mam: - nie mogę używać skryptów cli - musi to działać w miarę standardowej konfiguracji serwera bez konieczności instalowania egzotycznych dodatków - skrypt główny musi być wywoływany z cron'a więc wszelkie javascriptowe sztuczki też odpadają ... -------------------- |
|
|
2.12.2015, 13:54:49
Post
#3
|
|
Grupa: Zarejestrowani Postów: 898 Pomógł: 48 Dołączył: 2.11.2005 Skąd: Poznań Ostrzeżenie: (0%) |
Z crona chcę wywołać skrypt webowy - z tego co wiem na niektórych hostingach jest tak, że cronem można wywołać adres url z serwera, ale już się nie da wywołać skryptu cli - tak przynajmniej mi kiedyś tutaj na forum napisano, że niektóre hostingi nie pozwalają na uruchamianie skryptów cli.
|
|
|
2.12.2015, 14:07:25
Post
#4
|
|
Grupa: Zarejestrowani Postów: 915 Pomógł: 210 Dołączył: 8.09.2009 Skąd: Tomaszów Lubelski/Wrocław Ostrzeżenie: (0%) |
Nie spotkałem się z czymś takim (może chodzi Ci o zablokowane wywołania funkcji exec(), system() itd, a to nie ma nic wspólnego z cronem). Spotkałem się natomiast z sytuacją w aplikacjach gdzie w cronie było: "wget adresstrony.pl/skrypt.php", ale równie dobrze można by tam wtawić "cd katalog_niedostepny_z_www/; php skrypt.php". Do takiego urla trzeba również dorobić blokowanie po IP (bo nie chcemy żeby każdy mógł sobie "wyzwolić" skrypt , chociaż najnowsze badania każą wątpić w takie zabezpieczenie: http://lgms.nl/blog-2
-------------------- |
|
|
2.12.2015, 14:25:14
Post
#5
|
|
Grupa: Zarejestrowani Postów: 898 Pomógł: 48 Dołączył: 2.11.2005 Skąd: Poznań Ostrzeżenie: (0%) |
Czyli co twierdzisz, że takie blokowanie cli się praktycznie nie zdarza? Chodzi to o zwykłe zadania php typu curl itp?
Hmm, no gdyby tak rzeczywiście było to by rozwiązywało mój problem. Co prawda chyba gdzieś widziałem panele crona, które pozwalają wywołać tylko adres webowy i innej rzeczy nie wprowadzisz, ale to nie jest dla mnie problem, bo w Symfony mogę wywołać komendę z poziomu zwykłego kontrollera i zdaje się, jest tam też dodatek, który pozwala tworzyć multi-threading dla komend. Czyli zrobiłbym tak: - komenda główna wywołująca określoną ilość komend równolegle - dla sytuacji, w których cron nie pozwala na jawne wywołanie cli webowa akcja wywołująca komendę główną. |
|
|
2.12.2015, 14:44:32
Post
#6
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
Wrzuć sobie requesty do jakiegoś zew. systemu kolejkowania i niech tamten odpala zadania
|
|
|
2.12.2015, 15:11:57
Post
#7
|
|
Grupa: Moderatorzy Postów: 6 070 Pomógł: 860 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza |
Rozważ użycie curl_multi, przykład całości w manualu dla curl_multi_exec + warto poczytać komentarze.
|
|
|
2.12.2015, 16:26:28
Post
#8
|
|
Grupa: Zarejestrowani Postów: 898 Pomógł: 48 Dołączył: 2.11.2005 Skąd: Poznań Ostrzeżenie: (0%) |
@python_000 - niestety tutaj sprawa jest bardziej złożona bo nie znam z góry kiedy i ile razy będę musiał proces wywołać - to zależy od tego co user będzie miał w bazie. Niektórzy mogą mieć 100-500 wywołań, a inni liczone w setkach tysięcy + to będą akcje "jednorazowe" - zazwyczaj wykonywane raz lub dwa razy w tygodniu - przez pozostałą część czasu apka będzie bezczynna. Można by robić jakieś kolejki typu najpierw wywoływać skrypt A, który oblicza ilość potrzebnych wywołań i wrzuca to do kolejki i potem jakoś tą kolejkę obsługuje, ale trochę tu za dużo zabawy.
@phpion - o to też ciekawe rozwiązanie. Myślę, że na początek spróbuję to zrobić za pomocą poleceń CLI, ale całą logikę wrzucę do Services - jak ludzie będą zgłaszać, że nie mogą na swoich serwerach działać za pomocą CLI to dopiszę coś webowego - tu to curl_multi_exec wygląda obiecująco. Dzięki wszystkim za pomoc. |
|
|
2.12.2015, 16:32:31
Post
#9
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
No i co z tego. W swojej aplikacji podczas wywoływania akcji wysyłasz do kolejki powiedzmy 500 requestów, potem np. 10 workerów równolegle będzie Ci wywoływać dane requesty.
Czyli defacto masz użyć Symfonowego Queue ale z serwisem zew. i tyle. żadnej skomplikowanej roboty nie ma. |
|
|
2.12.2015, 16:44:19
Post
#10
|
|
Grupa: Zarejestrowani Postów: 898 Pomógł: 48 Dołączył: 2.11.2005 Skąd: Poznań Ostrzeżenie: (0%) |
A widzisz, to chyba nie wiem o czym piszesz ;-)
Nakierowałbyś mnie na jakieś artykuły o tym albo opisał w skrócie ideę wykonania takiego systemu - na szybko szukałem w Google, ale nic konkretnego mi nie wpadło w oko, a nigdy wcześniej nic podobnego nie robiłem. |
|
|
Wersja Lo-Fi | Aktualny czas: 26.04.2024 - 09:47 |