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

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

有这个参数吗?

最佳答案

--delay 来自版本 20121222 和 --sshdelay 来自版本 20130122。

= 编辑 =

--delay 是从作业开始时开始测量的,因此如果您的作业运行时间超过延迟 * 作业槽数(例如,在您的示例中为 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 是第一批的大小。

关于parallel-processing - GNU 并行 : Delay first jobs sent to remote servers,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16330869/

10-14 04:42