問題タブ [concurrent.futures]
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.
scala - Scala ネストされた先物
私にはいくつかの先物があります。CampaignFuture は List[BigInt] を返します。最初のリストから返されたリストの各値に対して、2 番目の将来の profileFuture を呼び出せるようにしたいと考えています。2 番目の Future は、最初の Future が完了したときにのみ呼び出すことができます。Scalaでこれを達成するにはどうすればよいですか?
scala - akka 競合状態のないアクター選択
私は先物プールを持っており、それぞれの先物は同じ akka アクター システムで動作します。システム内の一部のアクタはグローバルである必要があり、一部は 1 つの先物でのみ使用されます。
PhantomExecutor は、以下を使用して 1 つの共有グローバル アクター (単純なインクリメント カウンター) を使用しようとします。system.actorSelection
しかし、並行環境では、このアプローチは競合状態のために機能しません。
この問題の唯一の解決策は、先物に分割する前にグローバル アクターを作成することです。しかし、これは、トップライブラリユーザーからの多くの隠された作業をカプセル化できないことを意味します.
python - Python、アルゴリズムの並列化に役立ちます (スレッド プール内にスレッド プールを持たせようとしています)
いくつかの計算を並列化しようとしていますが、私のバージョンの 1 つ (より高速であるはずだと思っていた) がなぜより遅いのか理解できません。
要するに、userId のリスト (200 前後) と placeId のリスト (200 万前後) があります。各ペアのユーザー/場所のスコアを計算する必要があります。良い点は、計算が互いに完全に独立していることです (アルゴリズムの実装方法によっては、返される結果さえ必要ありません)。
これには2つのアプローチを試しました。
最初のアプローチ
- メインスレッドのすべての場所とすべてのユーザーをプルします
すべてのユーザーをループし、x スレッドを生成します (私の場合、私の小さな macbook 8 が最適なようです)
すべての先物が完了したら、それらすべてをループし、結果をデータベースに挿入します (ワーカー タスクはリスト [userId, placeId, score] を返します)。
すべての場所をループして結果を返すタスクがあります
/li>
この紳士淑女は、ユーザー/場所のすべてのセットを 10 分で計算します (ちなみに、シーケンシャルでは 1.30 時間ではありません :))
しかし、私は..スコア計算を並列化しないのはなぜですか? したがって、タスクが 2000 のすべての場所を 1 つずつループする必要がある代わりに、たとえば、他の 8 つのスレッドで計算を生成します。
2 番目のアプローチ:
基本的に、このアプローチは「タスク」関数のループを次のように置き換えています。
私がしなければならなかった他の変更は、calculateScores関数にあります
ご覧のとおり、calculateScores 自体が 8 つの // スレッドになるため、データベース接続を共有できません。そうしないと、競合状態エラーが発生します (そして、スクリプトは 4 回中 3 回クラッシュします)。
このアプローチは、より高速になると思っていましたが、25分かかります.....(単純なforループでは10分ではなく...)
すべてのタスクがプールからデータベース接続を取得するようになり、これはどういうわけか非常に高価であるため、速度が低下するため、これが遅くなることは 90% 確信しています。
私のシナリオで並列化を最大限に活用するための最良の方法について誰かがアドバイスをくれますか?
タスクが結果を返すようにすることは良い考えですか? または、calculateScores関数で準備ができたらすぐにデータベースに挿入する必要がありますか?
ThreadPool 内に Threadpool を配置することをお勧めしますか?
マルチプロセスを実行する必要がありますか?
ありがとう!
scala - Scala、Futures、WS ライブラリ、Api
私はプレイを持っています!httpリクエストを送信して別のサーバーと通信するScalaアプリケーション。このシステムには制限があります。1 つのトークンに対して同時に処理できる HTTP リクエストは 5 つだけです。
私はこの方法を書きました:
そして、このメソッドを使用するアクターがいて、数秒後に例外が発生します。
私の質問は次のとおりです。「実行モード」で機能の数を制御するにはどうすればよいですか? デフォルトの実行コンテキストではなく、別の実行コンテキストを使用する必要がありますか? 説明してください、または実行コンテキスト、スレッドなどの良い紹介をしてください
いちいち送信するのではなく、できるだけ早くリモートサービスから情報を取得したい
ありがとうございました!
python - メソッド ThreadPoolExecutor.shutdown(wait=True)、shutdown(wait=False) を使用する場合と、これを使用しない場合の違いは何ですか?
違いがわかりません。この違いを見るのを手伝ってください。そして、ProcessPoolExecutor はどうですか? 彼の動作は同じですか?
multithreading - タスクを分割するための未来のベクトル?
データ項目の数が多い場合、それを小さなリクエストに分割し、リクエストとその後のそのリクエストの解析を並行して実行したいという Web サービスからの応答があります。基本的に、最初のリクエストがデータを解析している間、後続のリクエストはそれを取得する必要があります。
これを行うにはいくつかのアプローチがあるようで、この場合は先物が適切かどうか疑問に思っています。先物は IO に使用すべきではなく、引数が逆になるというコメントを耳にします。
効果的に、私はこれをやろうとしています:
しかし、「エラー C2064: 項が 3 つの引数を取る関数に評価されません」というエラーが表示され、その理由がわかりません。先物は、それらをベクターなどのコンテナーに入れることを禁止しますか?
もしそうなら、私はこれに別の方法でアプローチする必要がありますか、それとも先物のリストを取得する別の方法がありますか? つまり、パッケージ化されたタスクを使用する必要がありますか?
理想的には、応答を任意にチャンクに分割し、チャンクごとにスレッドを作成しようとするのではなく、これをコア数に近づける必要があると思います。
python - Concurrent.futures > pyinstaller または py2exe でコンパイルした場合ではなく、コマンド ラインで適切に動作する
コマンドライン(Python 2.7)でうまく機能するconcurrent.futuresに基づく非常に単純なスクリプトがありますが、py2exeまたはPyinstallerでコンパイルするとクラッシュします(コンパイルされたプログラムはプロセスの数を増やし、最終的にウィンドウを完全にブロックします最初にそれらをすべて殺します)。
コードは非常に標準的/単純なので、この問題の原因を理解するのに苦労しています...以前にこれを経験した人はいますか? (マルチプロセッシングの同様の問題に関連する議論を見つけました...しかし、私の問題を解決するために使用できるものは何もありませんでした)
よろしく、S