暂停除 x 个 CPU 密集型任务之外的所有任务

暂停除 x 个 CPU 密集型任务之外的所有任务

我有大约 50 个文件夹的数据需要处理,并且我有一个处理文件夹文件的 ruby​​ 脚本(它处理哪个文件夹基于 .yml 配置文件)。还有一台有四个 CPU 的计算机。

我希望能够启动这 50 个进程,但任何时候都只能让其中 4 个进程处于活动运行状态,其他 46 个进程处于暂停状态。一旦其中一个进程完成,我希望其中一个暂停的进程恢复为暂停状态,直到所有 50 个进程都完成。这样,我可以这样做

./super_script.rb > folder_1_log.txt
*edit config.yml*
./super_script.rb > folder_2_log.txt
*edit config.yml*
...

专注于其他事情直到处理完成。

可以这样做吗? 有没有我想要的术语可以谷歌搜索?

(另一种选择是使 super_script 具有多线程功能 - 也许我太胆小了,不敢采用这种方法)

(操作系统是 Ubuntu Linux,大部分 CPU 时间不是被 super_script.rb 占用,而是被它通过 system() 调用的其他 ruby​​ 程序占用)

答案1

这是一个bash 脚本它看起来就像是做了一些接近您想要做的事情——它并行启动多个进程,但确保同时运行的进程不会超过 n 个。

另一方面,如果您所做的事情是磁盘受限的,而不是 CPU 受限的(我之所以问这个问题是因为您说您有“50 个文件夹的数据要处理”),那么您实际上最好串行运行所有进程,以避免进程之间争用磁盘。

相关内容