2

まず最初に、私はこの質問を認識しています:

私が知りたいのは、ギアマンでもそうですか?画像 URL のバッチを PHP Web アプリケーションからギアマン ワーカー (これも PHP で記述されています。これを「メイン ワーカー」と呼びます) に送信して、非同期的に処理することを計画しています。次に、このワーカーは、イメージごとに個別のタスクを下位層のワーカーに送信し (addTask() を介して)、runTasks() を呼び出し、タスクが終了するのを待ちながら、例外をリッスンし、エラー メッセージを蓄積し、全体的なジョブ ステータスを更新します。

jobStatus() 呼び出しを使用してメイン ワーカーから全体的なステータスを取得することはまったく問題ありませんが、[false, false, 0, 0] が返されたときにすべての画像が処理されたと言ってください一部の画像をそれぞれの URL から取得できなかったこと、またはサーバーに保存できなかったことをユーザーに通知します。

カスタム データを memcache に保存し、それを Web アプリから取得することはいつでもできると思いますが、私には「汚い」ように思えます...

php.netのマニュアルで見たところ、タスクが同期的に送信された場合にのみ例外処理を実行できるため、結果を取得しようとはしていません。カスタムデータの取得については言及していません。私が見逃している何かがあるかもしれないことを願っていました。私は正しく覚えています.libgearman6(v 0.27)とPHP 5.3.10でUbuntu Server 12.04を使用しています。Gearman エクステンションのバージョンは 1.0.2 です。どちらのワーカーでも使用しないため、データベースはここでは関係ないと思います。また、現在は永続的なキューを使用していないと思います。

4

1 に答える 1

3

ギアマンは、タスクの終了後にタスク情報をメモリに保持しないため(同期タスクについて報告するだけです)、サードパーティの場所に保存せずにWebアプリケーションで取得することはできません。通常、このためにアプリケーションで単純なWebサービスを使用し、タスクが完了したとき、またはエラーが発生したときにワーカーがアプリケーションにコールバックできるようにします。これにより、そのようなエラーが属するアプリケーションでこのようなエラーが発生したときに実行したいことに関するビジネスロジックを維持し、ワーカーをより一般的にすることができます(多くのアプリでは画像のサイズ変更が必要になる場合がありますが、一部のアプリでは必要になる場合があります)最初に実行される画像のサイズ変更に依存するいくつかのサブタスクを開始します)。

作成するときに、ワーカーにタスクの状態を使用してデータベースまたはmemcachedに直接書き込むこともできますが、変更する必要がなく、アプリケーション自体にロジックを処理させることで、ワーカーの動作が向上することがわかりました。 。また、実際のワーカーコード全体でコールバックを処理する同じ標準化された方法を維持できるようにするワーカーフレームワークにも適しています。

于 2012-07-24T13:15:06.713 に答える