Win on PHPでfork / threadを行う最良の方法は何ですか?
-
03-07-2019 - |
質問
多くの(数千の)サイトの更新をチェックするphpスクリプトがあります。 ときどき(サイトの数が増えるにつれて頻繁に)、これらのサイトの1つを更新すると実行タイムアウトが発生し、スクリプト全体が流出します。
私が思いつく最高のアイデアは、各アップデートを分岐することです。そのため、アップデートが終了しても、アップデート全体が続行されます。 私が収集したものから、PHPスレッド化は、特にWindowsプラットフォーム(これには残念ながら取り組む必要があります)に依存するものではないようです。
分岐メカニズムとしてcurlを使用することを考えましたが、サーバーにとっては(時間と処理能力の面で)コストがはるかに高くなりませんか?
PHPのfork / threadingについてのアイデアや経験をお聞かせください...
ありがとう、 オメル。
解決 5
まあ、最後に私はカールに行きました、それはうまく動作します。
Macで開発するため、クロスプラットフォームソリューションが必要でしたが、この場合、プロダクションサービスはWindowsです。つまり、 pcntl
は問題外です。
自分のサーバーに何千ものcurlリクエストを送信すると、そのサーバーを独占し、その時点でサイトのユーザーを悩ませるのではないかと心配していましたが、間違っていました。
ただし、すべてのcurl呼び出しを開始するスクリプトに set_time_limit(0)
を追加する必要がありました。そうしないとタイムアウトになります。
他のヒント
cURLを使用する場合は、multi *ファミリーのメソッドを調べて、cURLを合理化し、サイトのセットと対話することができます。そうは言っても、最大実行時間(ini_setを介して)を任意の高い数値に設定したり、ウォッチドッグカウンターを保持したりして、高くなりすぎないようにすることもできます。
しかし、最終的には、最終的にPHPの問題と完全なスレッドサポートの不足に直面するでしょう。だからあなたの最善の策は、他の選択肢、例えばネイティブスレッドのサポートを提供する他の言語/プラットフォーム。
pcntl拡張機能を使用して、PHPでなんらかの形式のスレッドを取得することができました。これは最善の解決策ではありませんでしたが、うまくいきました。
http://www.php.net/manual/en/ref .pcntl.php
次のリンクも試してください。実装の進め方がわかりました。
http://www.van-steenbeek.net/?q=php_pcntl_fork
http://www.hudzilla.org/phpbook/read.php/16_1_3
http://www.electrictoolbox.com/article/php/process-フォーク/
これが役立つことを願っていますが、phpはスレッド処理にはあまり適していません。
iniディレクティブを設定できます < code> max_execution_time を0に設定します。これにより、最大実行時間が削除され、このエラーが発生することなくスクリプトを実行できるようになります。ただし、この値はphp.iniファイルで設定する必要があります- ini_set
を使用しても機能しません。
set_time_limit(0);