問題タブ [gearman]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - Gearman PHP、sendComplete は効果なし
Gearman を既存の PHP プロジェクトに正常に接続しました。ワーカーが実行されていることを確認するために Supervisord を使用すると、かなり良い結果が得られました。
ただし、「setCompleteCallback」がまったく機能しないという重大な問題があります。
次のように分割します。
クライアント
ワーカー
(基本的に Zend Framework 環境をブートストラップし、exec 関数をロードします)
最後に、すべての面倒な作業を含む LDPE_Service_AWSConnect_Transfer_Target クラスを次に示します。すべてのロジックを削除しましたが、まったく起動しません。
実装方法
明確にするために、「transferStart/begin」および「transferStart/complete」文字列はログに正しく出力されますが、transferComplete/begin は決して起動されません。どうしたの?
ありがとう!アレックス
バックグラウンド モードで実行すると、コールバックが起動しないようです。
gearman - GearmanWorkerのコールバック関数の結果を指定するためにreturnを渡す
'true'や'false'のような操作の結果のデータまたは識別子を渡そうとしています。今のところ、completeとfailedのコールバックに基づいたタスクのリターンコードしか考えられません。結果にデータを渡す方法についていくつかアイデアを教えてください。
c - C でギアマン ワーカーを作成する
私は、C API (libgearman) を使用して Gearman ワーカーを実装しようとしています。しかし、C API のドキュメントは貧弱で完全ではありません。PHP などの他の言語でワーカーを作成するのと非常によく似ていますが、*gearman_worker_add_function();* を介してワーカーに関数を登録することはまだできません。
具体的には、 *gearman_worker_fn* のオブジェクトを作成する方法を見つけることができません。
ありがとう!
php - ギアマン ワーカーのバージョン管理
線形処理システムを Gearman に変換していますが、Gearman を実稼働環境に実際にデプロイしていません。
新しいバージョンのソース コード (ステージング、ダーク ローンチ、A/B) のプッシュに関して展開チェーンがありますが、Gearman ワーカーはメイン アプリケーションから完全に分離されているため、どのようにアップグレードすればよいのでしょうか?
思いつくオプションがいくつかありますが、どれも完璧ではありません。
- ソース コードを通常どおりバージョン管理し、環境をシャットダウンしてアップグレードする
- 関数登録名のワーカーのバージョン管理、
ResizeFunction-v1.3 - ワーカーにバージョン番号を追加し、それらをジョブにアタッチして、ワーカーが処理すべきでない場合は終了して別のワーカーに処理させることができるようにします。
理想的なシナリオでは、古いクライアント コードからのジョブが互換性のないワーカーによって取得されることを心配することなく、ワーカー コードの更新を処理できるため、バージョン アップグレードがスムーズになります。
ここではセマンティック バージョニングが適用されると思います ( v1.0.0- Major.minor.patch、メジャーは API の互換性を壊し、マイナーは新しい機能を追加し、パッチはバグを修正します)
php - バックグラウンドで GearmanManager
プロセスを委任するために、Ubuntu で Gearman/PHP を使用していました。この (開発) マシンでは、クライアントとワーカーをそれぞれ起動するためにいくつかのターミナル ウィンドウを開いていましたが、ライブ マシンではクライアントとワーカーをバックグラウンドに送り、ターミナルを解放する必要があります。
brianlmoon の GearmanManager を見つけました。これはまさに私たちが必要としているものに見えますが、問題は、そのコードではワーカーをバックグラウンドに送る部分しか見つけられず、クライアントで同じことをすることについて何も見つけられなかったことです。
GearmanManager を使用してすべてのクライアント/サーバー プロセスをバックグラウンドに送信する方法について、さらに情報を提供してもらえますか?
php - GearmanManagerグローバル変数==NULL
たとえば、BrianMoonのGearmanManagerを使用して、ワーカーをバックグラウンドに送信できます。私が直面している問題は、グローバルキーワードを使用して関数の外部で定義された変数を使用したい場合です。
変数がNULLであるため、このコードは200を出力しません!?
ワーカー関数でグローバルスコープを有効にする方法を知っていますか?
問題は、ギアマンマネージャーがワーカーファイルをそのまま含まないことだと思います...それを読み取って「ワーカー関数」に直接入りますが、それでも、スコープ外の変数にアクセスするための解決策があるはずです労働者機能の?!
php - 複雑な依存関係を持つタスクのスケジューリング
以前のいくつかのタスクが完了するとタスクが開始するタスクをスケジュールする方法を探しています。
さまざまなソースからデータを収集してデータベースにダンプする数百の「コレクター」プロセスがあります。これらの収集が完了したら(1秒から数分)、データベース内のデータを分析して理解するための一連の「データ処理」プロセスをすぐに開始したいと思います。これらすべてが終了したら、最後のタスクを開始して、要約データの電子メールを送信したいと思います。
現在、Gearmanキューを使用しており、「コレクター」プロセスが完了すると予想されると、タイマーでデータ処理タスクを開始しますが、これは、コレクタープロセスが3分後に終了した場合でも、処理ステップが10分後に開始されることを意味します(またはさらに悪いことに、まだ終了していません)。
理想的には、「プロセスAと(BまたはC)が完了したときにプロセスXを開始する」、「指定したプロセスの95%が完了したとき、または10分が経過したときにプロセスYを開始する」などの特定のルールを指定できます。
プロセスと依存関係は、毎回異なるパラメーターで実行されるため、自動的に作成する必要があります(つまり、毎回同じ計算を行うわけではありません)。
キューやモニターを使って自分でグラフ依存のフレームワークを書くこともできますが、それはすでに解決されているはずのようで、私が説明するようなものを使ったことのある人を探しています。
php - ギアマンの労働者は 1 人しか就職していない
何かをエコーして数秒間スリープする PHP で書かれたギアマン ワーカーがあります。このワーカーの 2 つのインスタンスを開始し、そのジョブを実行するためにギアマンを数回実行すると、ワーカーの 1 つ (最後に開始したもの) のみが実行されます。この労働者は仕事を終えました。ここで私は何か間違ったことをしていますか、それともギアマンがどのように表現すべきかという考えですか?
次に、コマンドを使用して2つのコンソールでワーカーを開始しました
次に、ギアマンを実行してジョブを数回実行しました。
Gearman デーモンに -t オプションが必要なのでしょうか? 私はOS-Xに取り組んでいます。
ところで:デーモン制御プロセスのオプションを変更するにはどうすればよいですか? /opt/local/etc/LaunchDaemons/org.macports.gearmand/org.macports.gearmand.plist を変更しましたが、リストを再読み込みするコマンドを実行する必要があると思います。
php - ギアマンPHPが終了せず、メモリが使い果たされた
「成功」がログに表示されると、メモリ使用量が増加しているのを確認でき、エラーが発生します。
PHPの致命的なエラー:1073741824バイトの許容メモリサイズが使い果たされました(24バイトを割り当てようとしました)
php - php GearmanClient タイムアウト
PHP で Gearman pecl 拡張機能を使用していて、関数呼び出しのタイムアウトが必要です。2 つの使用例: (1) 実行中のワーカーがない、(2) ワーカーの完了に時間がかかりすぎる
すべてが実行されている場合、呼び出しは非常に高速であり、このタイムアウトのオーバーヘッドを回避したいと考えています。
現在使用しているコード: