4

データ (100 のリモート サーバーに分散された 100,000 のジョブ) を中央データベースにインポートする gnu 並列スクリプトがあります。最初のジョブは、ほぼ同時に終了するため、中央データベースをバタンと閉めています。その後の仕事は次第に広がり、同時に輸入しようとはしなくなりました。

リモート サーバーごとに最初のジョブの実行を遅らせる方法はありますか? したがって、スクリプトは「今、サーバー 1 に対してプロセス #1 を実行し、サーバー 2 に対してプロセス #2 を 5 秒で実行し、サーバー 3 に対してプロセス #3 を 10 秒で実行し、サーバー 4 に対してプロセス #4 を 20 秒で実行します。 ..」。最初のバッチが各サーバーに送信された後、残りのプロセスができるだけ早く実行されるようにします。

これにはパラメータがありますか?

4

1 に答える 1

3

--delayバージョン 20121222 および--sshdelayバージョン 20130122 から。

= 編集 =

--delay はジョブの開始から測定されるため、ジョブが delay*jobslots (たとえば、100 サーバー * この例では 5 秒) よりも長く実行される場合、最初のバッチの後に遅延がないように感じられます。 .

比較:

time parallel -S 2/: --delay 1 'sleep {};hostname' ::: 2 2

に:

time parallel -S 2/: --delay 1 'sleep {};hostname' ::: 2 2 2

最初は 3 秒、2 回目は 4 秒かかります。

最初のバッチのみを処理する機能はありません。あなたができることは次のようなものです:

parallel 'if [ {#} -lt 100 ] ; then sleep {#} ; fi; do_stuff {}'

ここで、100 は最初のバッチのサイズです。

于 2013-05-02T10:52:45.110 に答える