python - 来自 Linux 上的命令队列的并行处理(bash、python、ruby ......随便)

标签 python ruby bash shell parallel-processing

我有一个包含 200 个命令的列表/队列,我需要在 Linux 服务器上的 shell 中运行这些命令。

我只想一次最多运行 10 个进程(从队列中)。有些过程需要几秒钟才能完成,而其他过程则需要更长的时间。

当一个进程完成时,我希望下一个命令从队列中“弹出”并执行。

有人有解决这个问题的代码吗?

进一步阐述:

有 200 件工作需要完成,排在某种队列中。我希望一次最多进行 10 件工作。当一个线程完成一项工作时,它应该向队列询问下一项工作。如果队列中没有更多的工作,线程应该死掉。当所有线程都死掉时,就意味着所有的工作都已经完成了。

我要解决的实际问题是使用 imapsync 将 200 个邮箱从旧邮件服务器同步到新邮件服务器。有些用户的邮箱很大,需要很长时间才能同步,有些用户的邮箱很小,同步很快。

最佳答案

在 shell 上,xargs 可用于对并行命令处理进行排队。例如,总是有 3 个并行 sleep ,每个 sleep 1 秒,总共执行 10 个 sleep 。

echo {1..10} | xargs -d ' ' -n1 -P3 sh -c 'sleep 1s' _

它总共会休眠 4 秒。如果您有一个名称列表,并且想将名称传递给执行的命令,再次并行执行 3 个命令,请执行

cat names | xargs -n1 -P3 process_name

会执行命令process_name aliceprocess_name bob等。

关于python - 来自 Linux 上的命令队列的并行处理(bash、python、ruby ......随便),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/463963/

相关文章:

python - 运行时错误 : CUDA error: CUBLAS_STATUS_EXECUTION_FAILED when calling `cublasSgemm( handle)` with GPU only

python - 如何在python中复制文件?

bash - 重新启动期间未捕获 SIGTERM

Python with BS4 and urllib - 如何移动/操作从网站提取的文本

python - 将 Pandas DataFrame 切割成小块,并对每个 block 进行简单的计算

ruby - ruby 上的 Artifactory AQL 发布

ruby - 以更像 Rubyish 的方式获得 2d 数组最大值?

ruby - class ClassName <::Other ClassName 在 Ruby 中做什么?

linux - 如何使 bash 脚本与一个又一个命令一起工作?

linux - 我很难理解 Shellshock 漏洞验证