問題タブ [furrr]

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.

0 投票する
0 に答える
363 参照

r - R/future/furrr で並列 API リクエストをレート制限する方法

Web API (NCBI entrez) から大規模なデータセットを取得する必要があります。これにより、1 秒あたりの要求数が 10 などに制限されます (サンプル コードでは、API キーなしで 3 つに制限されます)。次のように、furrr の future_* 関数を使用してリクエストを並列化し、できるだけ早くリクエストを取得しています。

明らかに、nrequest > 10(または制限が何であれ)、レート制限にすぐに違反します。

これに対する一見明白な単純な解決策が 2 つありますが、どちらも機能しているようです。1 つは、次のように、リクエストを行う前にランダムな短い遅延を導入することです。

2 つ目は、次のように、レート制限に設定されたセマフォでセマフォパッケージをplan(multiprocess,workers=<max_concurrent_requests>)使用するか、または使用して、同時要求の数をレート制限に制限することです。

ただし、私が本当にできるようにしたいのは、同時要求の数ではなく、要求レートを制限することです。Python で async io http requests を使用してこれを行う方法について、Quentin Pradet による素晴らしい投稿があります。これを R に適応させようとしましたが、future_* 関数内のスレッド/プロセス間で共有される変数は、実際に共有されるのではなくコピーされるという問題に遭遇しました。スレッド/プロセスに依存しているため、このメソッドが機能するために依存しているカウンター バケットを実装することはできません。

同時リクエストの数を必ずしも制限せずに、並列リクエストのレートを制限する賢い方法はありますか? それとも、これを考えすぎて、数を制限することに固執する必要がありますか?

0 投票する
2 に答える
683 参照

r - R: 非同期並列ラップ

これまでlapplyに R で並列を使用する最も簡単な方法は、次のコード例を使用することでした。

これには、結果の進行状況バーを提供する非常に便利な機能があり、 を設定することにより、並列計算が必要ない場合に同じコードを非常に簡単に再利用できますcl = NULL

ただし、私が指摘した 1 つの問題は、pblapplyがリストをバッチでループしていることです。たとえば、1 つのワーカーが特定のタスクで長時間スタックしている場合、残りのワーカーはそのタスクが終了するのを待ってから、新しいバッチのジョブを開始します。特定のタスクでは、これによりワークフローに多くの不要な時間が追加されます。

私の質問: ワーカーを独立して実行できる類似の並列フレームワークはありますか? 進行状況バーとコードを再利用できる機能はcl=NULL、大きなプラスになります。

の既存のコードを変更してpbapply、このオプション/機能を追加することは可能でしょうか?

0 投票する
1 に答える
179 参照

r - マルチセッションプランを微調整しようとすると、R furrr プランはエラーを返しますか?

必要なプランを設定しようとしていますが、次のエラーが発生します。

エラーは次のとおりです。

また:

/ プランのworkerslazygcおよびその他のパラメータを設定する方法を教えてください。multisessionmulticore

私のRバージョンは次のとおりです。