1

最近ビデオ スクリプトを新しいサーバーにインストールしましたが、(mencoder を介して) 1 つのビデオの変換を開始し、終了する前に別のビデオを変換しようとするため、4+ を変換しようとします。同時にサーバーがシャットダウンします。スクリプト開発者は次のように述べています。

「各ビデオを PHP バックグラウンド プロセスで変換します。サーバー上の PHP バックグラウンド プロセスの数を制限し、それらをキューに入れる方法があるかもしれません。」

それで、これはどのように行われますか?

よろしく

4

2 に答える 2

1

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
于 2008-12-30T08:54:46.397 に答える
0

ある種のロックを使用します。たとえば、ディレクトリでファイル ロックを使用して、一度に 1 つのプロセスだけがリソースを使用できるようにします。

これには、現在実行中のエンコーダーによってロックが解放されるのを待機するエンコーダーのラッパー スクリプトが必要になります。

また、エンコーダーがクラッシュした場合にロックが解放されていないことを検出し、ロックを解放するのに十分なほどスマートである必要があります。

編集: 問題についての私の理解は、スクリプトの複数の呼び出しがあり、それぞれが mencoder を呼び出すことでした。ただし、他の応答から、バックグラウンドですべてのプロセスを実行している 1 つの呼び出しである可能性があるようです。次に、セマフォを使用したソリューションの方が優れていると思います。

編集:誰かが以前にこの質問をしたようです:

php でロックを取得する最良の方法

于 2008-12-30T08:43:16.077 に答える