4

我有一个 gnu 并行脚本,可将数据(100,000 个作业分布到 100 个远程服务器)导入中央数据库。第一份工作正在猛烈抨击中央数据库,因为它们几乎同时完成。之后的工作最终分散开来,不要尝试同时导入所有工作。

有没有办法延迟每个远程服务器的第一个作业的执行?所以脚本可以说“现在运行进程#1到server1,在5秒内运行进程#2到server2,在10秒内运行进程#3到server3,在20秒内运行进程#4到服务器4,......,. ……”。在第一批被发送到每个服务器之后,id 就像其他进程一样尽快运行。

有这个参数吗?

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 秒,第二次需要 4 秒。

没有仅处理第一批的功能。你可以做的是这样的:

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

其中 100 是第一批的大小。

于 2013-05-02T10:52:45.110 回答