|
помогите запустить несколько php страниц и не ожидая их ответа продолжить работу
|
|||
---|---|---|---|
#18+
Подскажите как в процессе работы PHP страницы реализовать вызов второй PHP страницы, но не ждать пока она что то вернёт, а тупо забыть про неё и продолжить работу. Причём на следующей итерации я хочу вызвать эту же PHP страницу но с другими параметрами и опять забыть. Таким образом мой родительский процесс должен уметь запустить пару сотен дочерних процессов и закончить работу, а те в свою очередь отработать своё и тоже завершиться вне зависимости друг от друга. Как это сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2018, 00:59 |
|
помогите запустить несколько php страниц и не ожидая их ответа продолжить работу
|
|||
---|---|---|---|
#18+
Если без веб-браузера - тогда форк или системный вызов или из внешнего скрипта запуск. Если с веб-браузером - тады аякс. А вообще, на сервере есть пара сотен ядер или Вы просто желаете его завалить? ;-) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2018, 09:36 |
|
помогите запустить несколько php страниц и не ожидая их ответа продолжить работу
|
|||
---|---|---|---|
#18+
Не благодари Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48.
И ещё: лучше не придумаешь ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2018, 19:32 |
|
помогите запустить несколько php страниц и не ожидая их ответа продолжить работу
|
|||
---|---|---|---|
#18+
TolikDлучше не придумаешьА нафига нужны curl с вебсервером, если, по большому счету, можно обратиться к ресурсам сервера напрямую? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2018, 19:51 |
|
помогите запустить несколько php страниц и не ожидая их ответа продолжить работу
|
|||
---|---|---|---|
#18+
vkle, проходили уже ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2018, 19:56 |
|
помогите запустить несколько php страниц и не ожидая их ответа продолжить работу
|
|||
---|---|---|---|
#18+
vkle, Не, ну можешь попробовать, может пример приведешь, только с тестированием в разных условиях. Не забываем, что серв может банально запрещать запуск шелла ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2018, 19:59 |
|
помогите запустить несколько php страниц и не ожидая их ответа продолжить работу
|
|||
---|---|---|---|
#18+
TolikD, Когда нужно u78запустить пару сотен дочерних процессов, на это далеко не всякий шаред-хостинг согласится. Админы хостера не самоубийцы и лимиты обычно как-то настраивают. Так что, для выполнения задачи именно в таком виде остается ВПС или выделенный сервер, где шелл уж точно доступен. Или задачу следует переформулировать с учетом ограничений хостера. Это касаемо различных условий. С другой стороны, на своем сервере ресурсы тоже не безграничны. Запуская туеву хучу процессов, тем самым инициируем бОльшие затраты на переключение ядра между процессами и, возможно, оперативной памяти, что в итоге приведет далеко не к линейному увеличению производительности. В какой-то момент окажется, что дальнейшее увеличение количества процессов приводит скорее к росту LA, чем к ожидаемому росту производительности. Впрочем, две сотни ленивых пхпшных процессов для современного многопроцессорного сервера - это не фатально, конечно. Для 8-ядерника это порядка 30 на ядро - погудит, но прожует рано или поздно. Сотни TCP-сокетов тоже перевариваются, была бы память в достатке. Ну а с третьей стороны, проблемы тормозов вылезут запросто где-то на совместном использовании СУБД, например. Если интересно, из моего опыта. С год назад решал подобные задачи - на постоянной основе требуется в возможно более короткий срок собирать данные с внешних источников, слегка обработать и поместить в базу. Предыдущая модель с курлом, дергающим скрипты через вебсервер именно так и работала, кстати. Если не ошибаюсь, запускалось централизованно с десяток запросов за раз то ли каждую секунду, то ли каждые три или пять, что-то вроде того. В принципе, оно так работало не первый год, и всё бы ничего, да иногда неплохой такой выделенный сервер, на котором ещё и несколько каких-то веб-сайтов крутились, иногда вставал колом из-за того, что за отведенное время процесс обработки не успевал отработать по разным причинам. Ну тут понятно, нагрузка от веб-сайтов стала выше, а мер по контролю серверных ресурсов в скриптах, попросту, не было принято. Снижение количества запускаемых процессов не приветствовалось, так как "да вы чего, оно и так медленно работает". В общем, в какой-то момент начальство это дело достало и тогда было принято оперативное решение: чтобы не мешать сайтам, убрать этот сервис на отдельную машинку. Взяли бюджетненькую ВПСку об одном процессорном ядре и одном ГБ памяти (нетбабла, чего уж), ну а там, разумеется, этот сервис, в том виде, как он жил на "большом и толстом", даже и не думал выдавать приемлемую производительность. С неделю потратил на поиски оптимальных алгоритмов и минимизацию всевозможных затрат, так, что от старого кода остался только парсер. Разумеется, переработка далеко не ограничилась только исключением курла и вебсервера - там и очереди в процессах организовал и проверку ресурсов. Конкретно в моем случае оказалось, что для приемлемой работы сервера без заметных перегрузок максимальное число активных процессов сбора/обработки не должно превышать 12...16 (далее круто растет Load Average). По максимуму производительности не оценивал, а причесывать код закончил когда пользователи сказали что скорость отдачи результата их устраивает. Вот, как-то так. Понятно, что проще купить сервер помощнее, чем нанять толкового программиста. К сожалению, таковы реалии. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2018, 22:19 |
|
помогите запустить несколько php страниц и не ожидая их ответа продолжить работу
|
|||
---|---|---|---|
#18+
TolikD, всё таки поблагодарю спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2018, 00:02 |
|
помогите запустить несколько php страниц и не ожидая их ответа продолжить работу
|
|||
---|---|---|---|
#18+
u78, Если хотите функционал подключить то include() Если в браузере вызвать то пользуйте ajax Или опишите толком что вы хотите сделать! ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2018, 14:37 |
|
помогите запустить несколько php страниц и не ожидая их ответа продолжить работу
|
|||
---|---|---|---|
#18+
vkleЕсли интересно, из моего опыта. Прочел, интересно было да ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2018, 23:02 |
|
помогите запустить несколько php страниц и не ожидая их ответа продолжить работу
|
|||
---|---|---|---|
#18+
u78TolikD, всё таки поблагодарю спасибо Кстати сорь, косяк всё тки есть Будет задержка из-за кода: Код: php 1.
этот я использую. Тебе сменить на Код: php 1.
и поиграться с параметром 10, может меньше, может чуть больше, зависит от серва. Не забудь убрать совсем: Код: php 1.
Ещё: Код: php 1.
здесь можно выставить минимально usleep(1), но убирать совсем не стоит, не помню зачем, но лучше оставить ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2018, 23:15 |
|
помогите запустить несколько php страниц и не ожидая их ответа продолжить работу
|
|||
---|---|---|---|
#18+
TolikDПфффф... МастерхостАга, у них особо жестоких ограничений по процессам не припоминаю. На крон, вроде, было необычное ограничение - запуск не чаще чем раз в пять минут. Впрочем, давно к ним не заглядывал. TolikDloser.log:Любопытно. Первая пачка в полсотни запросов стартовала сразу, потом завершения пошли, и так в цикле практически. Получается, что одновременно выполняются порядка полусотни запросов. Такое впечатление, что на уровне вебсервера ограничение на количество выполняемых запросов. Вызываемый скрипт - не пробовали заставить его работать подольше (секунду-другую, чтобы попытаться набрать все двести одновременно) и, возможно, чем-нибудь слегка производительным загрузить с записью лога в базу или в свой, отдельный файл (чтобы на общем логе не тупили в ожидании разрешения коллизий)? Возможно, для полноты картины в параметрах запроса следует добавить метку времени - когда отправлен запрос, а в скрипте вывести в лог эту переданную метку и фактическое время запуска. Подозреваю, вылезет какое-то ожидание. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2018, 01:09 |
|
|
start [/forum/topic.php?fid=23&fpage=27&tid=1460405]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
27ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 310ms |
total: | 428ms |
0 / 0 |