multithreading - Perl 或 Bash 线程池脚本?

标签 multithreading perl bash threadpool

我有一个脚本 - 一个线性命令列表 - 需要很长时间才能按顺序运行。我想创建一个实用程序脚本(Perl、Bash 或 Cygwin 上可用的其他脚本),它可以从任何线性脚本读取命令并将它们分配给可配置数量的并行工作人员。

所以如果 myscript

command1
command2
command3

我可以跑:

threadpool -n 2 myscript

将创建两个线程,一个从 command1 开始,另一个从 command2 开始。无论哪个线程先完成其第一项工作,都会运行 command3

在深入研究 Perl 之前(已经很久了)我想我应该问问专家们是否已经存在这样的东西。我确信应该有这样的东西,因为它对于利用多 CPU 机器和并行网络传输(wgetscp)都非常有用。我想我不知道正确的搜索词。谢谢!

最佳答案

如果您需要不混淆输出(xargs -P 有风险),那么您可以使用 GNU Parallel:

parallel -j2 ::: command1 command2 command3

或者如果命令在文件中:

cat file | parallel -j2

GNU Parallel 是一个通用的并行器,可以很容易地在同一台机器或您可以通过 ssh 访问的多台机器上并行运行作业。

如果您有 32 个不同的作业要在 4 个 CPU 上运行,一个直接的并行化方法是在每个 CPU 上运行 8 个作业:

Simple scheduling

GNU Parallel 在一个进程完成时生成一个新进程 - 保持 CPU 处于事件状态,从而节省时间:

GNU Parallel scheduling

安装

如果 GNU Parallel 没有为您的发行版打包,您可以进行个人安装,这不需要 root 访问权限。这样做可以在 10 秒内完成:

(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash

有关其他安装选项,请参阅 http://git.savannah.gnu.org/cgit/parallel.git/tree/README

了解更多

查看更多示例:http://www.gnu.org/software/parallel/man.html

观看介绍视频:https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

浏览教程:http://www.gnu.org/software/parallel/parallel_tutorial.html

注册电子邮件列表以获得支持:https://lists.gnu.org/mailman/listinfo/parallel

关于multithreading - Perl 或 Bash 线程池脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6580191/

相关文章:

c# - 如何初始化反射数据的线程安全静态缓存

python - _tkinter.tclerror : bad option set tcl value number must be activate, 获取、配置

regex - 有没有办法计算 Perl 正则表达式匹配的次数?

xml - 如何使用 Perl 的 XML::Simple 从 XML 文件中提取值?

linux - 如何删除具有 X 天生命周期的文件,而不是上次修改的文件。有没有可能。 Linux

string - 在 bash 中使用回车执行字符串比较

string - 使用 awk 提取和拆分

java - Java:Stack实现中的线程同步

C 客户端/服务器套接字错误

如果未引用键,JSON::XS 会提示