|
Почему скрипты не выполняются параллельно?
|
|||
---|---|---|---|
#18+
Приветствую уважаемых коллег. Пожалуйста помогите решить такую проблему. Через bash пытаюсь запустить несколько php скриптов в фоновом режиме одновременно. Скрипт примерно такой: Код: powershell 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
По своим логам вижу, что выполняется только один поток (необязательно первый, но первый чаще всего). Если убрать амперсанд в конце команды, то все скрипты выполняются по порядку последовательно. Но почему я не могу запустить в фоне их все одновременно? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 13:13 |
|
Почему скрипты не выполняются параллельно?
|
|||
---|---|---|---|
#18+
Вероятно, что-то внутри скрипта не дает работать остальным экземплярам. Навскидку, например, session_start() в PHP ожидает освобождения сессии. Простой же тест показывает, что работают все экземпляры. Скрипты: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Код: sql 1. 2. 3.
Запуск Код: sql 1. 2. 3. 4. 5.
Смотрим: Код: sql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 15:00 |
|
Почему скрипты не выполняются параллельно?
|
|||
---|---|---|---|
#18+
vkle Вероятно, что-то внутри скрипта не дает работать остальным экземплярам. Навскидку, например, session_start() в PHP ожидает освобождения сессии. одновременное обращение к mysql через PDO может быть причиной? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 15:28 |
|
Почему скрипты не выполняются параллельно?
|
|||
---|---|---|---|
#18+
Лебедкин одновременное обращение к mysql через PDO может быть причиной? Не сам PDO, конечно, есть причина. В разных скриптах создаются разные объекты PDO, да и сессии в MySQL они открывают разные. Вряд ли какая-то связь меж ними на уровне PDO возможна. Причиной может стать блокировка (в том числе и неявная) таблиц в сессии MySQL от запросов первого скрипта. Запросы из второго и последующих экземпляров скрипта будут ожидать снятия блокировки коллегами, чтобы установить свою. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 19:33 |
|
Почему скрипты не выполняются параллельно?
|
|||
---|---|---|---|
#18+
Понятно, спасибо, будем искать причину внутри. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 08:16 |
|
Почему скрипты не выполняются параллельно?
|
|||
---|---|---|---|
#18+
Вот ещё вопрос родился: Можно ли средствами bash ограничить число одновременно запускаемых процессов? Например, имеется массив из 30 задач, я хочу чтобы они выполнялись параллельно, но при этом одновременно должно быть запущено не более 10 скриптов. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 10:17 |
|
Почему скрипты не выполняются параллельно?
|
|||
---|---|---|---|
#18+
Лебедкин Вот ещё вопрос родился: Можно ли средствами bash ограничить число одновременно запускаемых процессов? Например, имеется массив из 30 задач, я хочу чтобы они выполнялись параллельно, но при этом одновременно должно быть запущено не более 10 скриптов. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 11:37 |
|
Почему скрипты не выполняются параллельно?
|
|||
---|---|---|---|
#18+
Лебедкин Например, имеется массив из 30 задач, я хочу чтобы они выполнялись параллельно, но при этом одновременно должно быть запущено не более 10 скриптов. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 12:05 |
|
Почему скрипты не выполняются параллельно?
|
|||
---|---|---|---|
#18+
vkle, Да?! для меня открытие, что в PHP вообще можно форкать. я был уверен, что это сугубо однопоточный язык и максимум что там можно сделать - это запустить внешний скрипт через shell_exec и не ждать его исполнения. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 12:35 |
|
Почему скрипты не выполняются параллельно?
|
|||
---|---|---|---|
#18+
Лебедкин, Одно другому не мешает. Однопоточный и есть. Форкается то процесс. Ну а управление процессами в документации расписано. Тынц . Там же рядом есть и передача сигналов, если что. Ну в форке тоже есть нюансы. Тот же коннект к СУБД, например. Общим, точнее, форкнутым, его можно сделать и он будет работать. Но! Если этот коннект закроет какой-то один из из экземпляров (например, завершившись), то остальные останутся с... В общем, долго искал, кудау меня коннект делся. В итоге в каждом запущенном экземпляре инициализацию с нуля делал. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 12:52 |
|
Почему скрипты не выполняются параллельно?
|
|||
---|---|---|---|
#18+
Нашел вот на python практически готовое решение: Код: python 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 13:44 |
|
Почему скрипты не выполняются параллельно?
|
|||
---|---|---|---|
#18+
Осталось самая малость - переписать скрипты на другой яп? ;-) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 19:44 |
|
Почему скрипты не выполняются параллельно?
|
|||
---|---|---|---|
#18+
vkle Осталось самая малость - переписать скрипты на другой яп? ;-) зачем? Мы же легко вызываем из bash скрипт, написанный на php. Также можно делать из python. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2019, 11:07 |
|
Почему скрипты не выполняются параллельно?
|
|||
---|---|---|---|
#18+
Так это лишь замена скрипта на bash, а из него пойдет обычный системный вызов для запуска другой программы? Тады да, конечно. Кстати, удалось выяснить причину блокировки или ожидания в пхпшном скрипте? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 09:15 |
|
Почему скрипты не выполняются параллельно?
|
|||
---|---|---|---|
#18+
vkle Кстати, удалось выяснить причину блокировки или ожидания в пхпшном скрипте? Неа. там говно-коду строк на 500, написанного не мной, поэтому я решил пока туда не лазить. Просто не стал делать параллельное выполнение скриптов, тормозят конечно, но пока терпимо. Когда-нибудь руки дойдут, полезу разбираться там. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 12:20 |
|
Почему скрипты не выполняются параллельно?
|
|||
---|---|---|---|
#18+
Лебедкин Нашел вот на python практически готовое решение: Код: python 1. 2. 3. 4.
мультипоточность в питоне вроде плохо работает, лучше задействовать мультипроцессорность The asynchronous execution can be performed with threads, using ThreadPoolExecutor, or separate processes, using ProcessPoolExecutor. Both implement the same interface, which is defined by the abstract Executor class. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2019, 16:22 |
|
Почему скрипты не выполняются параллельно?
|
|||
---|---|---|---|
#18+
сладкий бубалех Лебедкин Нашел вот на python практически готовое решение: Код: python 1. 2. 3. 4.
мультипоточность в питоне вроде плохо работает, лучше задействовать мультипроцессорность The asynchronous execution can be performed with threads, using ThreadPoolExecutor, or separate processes, using ProcessPoolExecutor. Both implement the same interface, which is defined by the abstract Executor class. только наверное не мультипроцессорность, а мультипроцессность - это все же несколько разные вещи ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2019, 16:30 |
|
Почему скрипты не выполняются параллельно?
|
|||
---|---|---|---|
#18+
Лебедкин Можно ли средствами bash ограничить число одновременно запускаемых процессов? Например, имеется массив из 30 задач, я хочу чтобы они выполнялись параллельно, но при этом одновременно должно быть запущено не более 10 скриптов. Если это Linux, то программа xargs умеет что нужно. Ключ -P <x> запускает не более x параллельных процессов за раз, -n <x> передаёт не более x аргументов процессов. Код: plaintext
запустит два test.php параллельно с аргументами 115116 173909 каждому и затем ещё два с оставшимися цифрами На больших Unix для такого функционала надо использовать xargs из GNU coreutils ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2019, 11:28 |
|
|
start [/forum/topic.php?fid=25&msg=39897654&tid=1481084]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
others: | 300ms |
total: | 447ms |
0 / 0 |