問題タブ [chord]
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.
python - Celery: コード内のすべてのタスクを中止または取り消す
Redis ブローカーとバックエンドで次のセットアップを使用します。
chord([A, A, A, ...])(B)
- タスク A はいくつかのチェックを行います。ベースとして使用し、定期的にフラグ
AbortableTask
をチェックします。task.is_aborted()
- タスク B は、計算結果をユーザーに通知します。
ユーザーは、A タスクを中止することができます。残念ながら、AbortableAsyncResult(task_a_id).abort()
すべてのタスク A インスタンスを呼び出すと、アクティブなものだけが中止されます。ワーカーがまだ受信していないタスクのステータスは に変更されABORTED
ますが、まだ処理中であり、is_aborted()
フラグは False を返します。
もちろんrevoke()
、保留中のタスクをabort()
-ing する代わりに実行することもできますが、問題は、その場合、コード本体 (タスク B) が実行されなくなることです。
保留中および実行中のすべてのタスク A インスタンスを停止しながら、タスク B を確実に実行するにはどうすればよいでしょうか?
python - Celery chord は子タスク (チェーンのグループ) を待っていません
私の現実の状況では、API 呼び出しからキャンペーンのリストを取得し、キャンペーンごとに一連の関数をトリガーしたいと考えています。すべてのチェーンが完了したら、関数を呼び出して結果を報告する必要があります。
これを可能な限り単純化して、次のコードを作成しようとしました。これは実行されますが、チェーンが完了する前にコード ロック解除関数が呼び出されます。このコードでは、結果の配列を合計できないことを意味します。
関数はこの回答dmap
に基づいていました。この回答も見ました。最後のリンクは、「グループが並行して発生するため、同期するものが何もない」ため、やりたいことができない可能性があることを意味します。
generate
関数が単一のアイテムではなく配列を返すときに、ソリューションを曲げて機能させる方法を理解できませんでした。
上記の実行からのログは、(初期の?) コードのロック解除を示しているためxsum
、3 が である結果の配列を合計しようとしていますNone
。
コードのロック解除が呼び出される前に、各チェーンチェーンが完了するまでプロセスが待機することを期待/期待していました。
p2p - アプリケーションは同じ DHT 内に共存できますか?
分散ハッシュ テーブル (DHT) を使用する新しいアプリケーションを作成する場合は、p2p ネットワークをブートストラップする必要があります。既存の DHT (Bittorrent DHT など) に参加できるという考えがありました。
これは実現可能ですか?もちろん、同じ技術を前提としています。Chord と Kademlia を組み合わせることは明らかに不可能です。
はいの場合、これは寄生または共生と見なされますか? なんとなく本来の用途に抵触するという意味の寄生。相互にサポートするため、両方のアプリケーションに適している場合は共生。
clojure - Reagent / Clojurescriptでクライアントの状態を最新に保つ
これについて最善の方法がわかりません:
いくつかの「プロジェクト」オブジェクトの基本的な CRUD 機能を実装する、作成中の Web アプリケーションがあります。そのため、ユーザーは独自のプロジェクト セットを作成できます。
プロジェクトを追加/削除/一覧表示するための REST API を作成し、Reagent フロントエンド クライアントを作成しました。ご想像のとおり、クライアントのプロジェクトは試薬アトム (ratom) に保持されます。
ここが興味深いところです。
私が見たすべてのチュートリアルでは、ratom を更新する方法を示しており、GUI は自動的に更新されます。私はそれを持っています、それはうまくいきます。
私が現在行っていることは、クライアントの状態を更新する時点で、データベースのサーバーの状態を更新するために REST POST 呼び出しを行うことです。
しかし、これは気分が悪い。現在、クライアントとサーバーの 2 つの場所に状態を保存していますが、どちらも異なる可能性があります。
これを単純な古い Web ページとして実装した場合、サーバーはデータベースの最新の状態を含むページをクライアントに送り返します。しかし、状態はクライアントのラトムに既に存在しており、どのように同期すればよいかわかりません。
最初の POST が成功した後、サーバーに別の呼び出し (GET 要求) を行う必要がありますか? これにより、ratom の内容が置き換えられる可能性があります。それから私は2つの要求をしています..無駄に思えます。
または、コードやセンテなどを使用してクライアントの状態を非同期に管理することをお勧めします。これは、他のユーザーからの変更がクライアント側で即座に更新されることを意味するため、より優れています。しかし、これらのいずれかに反応することを示すチュートリアルが表示されないため、間違った方向に進んでいる可能性があります。
したがって、問題は単純に、組み合わせて REST とどのように反応するべきかということです。
ありがとう
python - Celery - コード内で成功とエラーのコールバックを実行するにはどうすればよいですか?
したがって、並行して呼び出す必要がある 2 つのタスクがあり、それらが成功または失敗した場合は何かを実行する必要があり、それらの結果を別のタスクに使用する必要もあります。より明確にするために、ここでホワイトボードを試してみます。
加算と減算を並行して実行し、それらの結果を取得して別のコールバックを実行できるため、コードが最適なオプションであると判断しました。
私のタスクのコードは次のとおりです。
djangoシェルで遊んで、次のことを試しました:
そして、これが生成する例外です:
アイデアや提案は大歓迎です。どうもありがとうございました。
rabbitmq - コードヘッダーにグループとチェーンが含まれている場合、コードは再試行を続け、callbak を実行しません。なぜですか?
セロリで次のコードを実行すると、タスクは成功しました:
そしてそのような結果:
しかし、チェーンをchordに変更すると、タスクは無限に再試行を続け、コールバックを実行しません。以下は私が変更したコードです:
そしてそのようなログ:
コードの何が問題なのですか?誰か助けて、ありがとう