所以,我有 10 个 CPU 核心和 20 个数据要处理。我想并行处理数据,但我担心如果一次只处理 20 个数据会产生一些问题。所以,我想处理10个数据2次。有什么命令可以做到这一点吗?
添加信息:
数据采用文件格式。它相当巨大,每个文件可达10GB。根据我的经验,如果我启动超过 10 个进程,PC 会变得非常慢,甚至滞后。所以我将进程限制为 10 个,这等于核心数量。至于我的 RAM,我相信处理文件的软件不会立即加载所有内容,因此 RAM 使用率相当低。这就是为什么我只需要对每 10 个数据并行处理一次。现在,我生成了 10 个并行执行的 shell 脚本,每个 shell 脚本都包含顺序命令。
答案1
使用 GNU 并行:
parallel my_process {} ::: files*
这将为my_process file
每个 CPU 线程运行一个。
您可以告诉 GNU Parallel 在开始下一个作业之前确保有 10G 的可用 RAM:
parallel --memfree 10G my_process {} ::: files*
如果可用内存低于 5G,则 GNU Parallel 将终止最新作业,并在再次有 10G 可用内存时重新启动它。
答案2
gnu并行可以做到这一点。在 Debian 上执行apt-get install parallel
.然后阅读手册。
Gnu 并行的工作原理与此类似xargs
,但在决定是否启动更多并行进程方面做得更好。
(make
也可以做到。)