PHP вызывает несколько видео для конвертации одновременно через mencoder. Как я могу ограничить это? - PullRequest
1 голос
/ 30 декабря 2008

Я недавно установил свой видео-скрипт на новый сервер, но я вижу, что он начнет конвертировать 1 видео (через mencoder), затем, прежде чем завершить его, он попытается преобразовать другое и другое, поэтому он будет пытаться конвертировать 4+ видео одновременно, что приводит к остановке сервера. Разработчик сценария сказал:

"Он преобразует каждое видео в фоновый процесс PHP. Может быть способ ограничить количество фоновых процессов PHP на вашем сервере и поставить их в очередь."

Так как это сделать, пожалуйста?

Привет

Ответы [ 2 ]

1 голос
/ 30 декабря 2008

Использование Семафоры PHP

Вы можете использовать семафор с общим счетом в PHP и реализовать очередь с ограничением на номер. параллельных казней. Семафоры всегда являются наиболее рекомендуемым методом для любой формы управления параллелизмом.

Используя это, вы можете легко настроить и контролировать параллельные исполнения mencoder , а также ограничить их.


псевдокод

Begin
    init sem=MAX;

    wait(sem) //sem--, waits if sem=0, till atleast one process comes out of the critical section
    /*
        Critical Section
        where you execute mencoder
    */
    signal(sem) //sem++
End
0 голосов
/ 30 декабря 2008

Используйте какой-нибудь замок. Например, используйте блокировку файлов в каталоге, чтобы ресурс мог использовать только один процесс за раз.

Для этого потребуется скрипт-обертка для кодировщика, который будет ожидать снятия блокировки работающим в данный момент кодировщиком.

Он также должен быть достаточно умен, чтобы определять, когда блокировка не была снята, если кодер выходит из строя, и снимать блокировку.

Edit: Мое понимание проблемы заключалось в том, что в сценарии было несколько вызовов, каждый из которых вызывал mencoder. Однако из другого ответа кажется, что это может быть один вызов, запускающий все процессы в фоновом режиме. Тогда я думаю, что решение с использованием семафоров лучше.

Edit: Похоже, кто-то задавал этот вопрос раньше:

лучший способ к получить-а-замок-в-PHP

...