質問

多くの(数千の)サイトの更新をチェックする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 を使用しても機能しません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top