加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl – 负责分叉

发布时间:2020-12-15 22:06:27 所属栏目:大数据 来源:网络整理
导读:我刚刚发现了Perl forking,我很爱.但有一点让我担心 – 如果我只是左右分离流程,肯定会在某处引起某些问题.是否有合理的检查,以确保我的小应用程序不会占用我的机器的所有资源? 拿这个示例代码: foreach my $command (@commands) { my $pid = fork(); if (
我刚刚发现了Perl forking,我很爱.但有一点让我担心 – 如果我只是左右分离流程,肯定会在某处引起某些问题.是否有合理的检查,以确保我的小应用程序不会占用我的机器的所有资源?

拿这个示例代码:

foreach my $command (@commands) {
   my $pid = fork();
   if (!$defined $pid) {
     #Fork failed. Do something.
   } elsif ($pid == 0) { #This is the child.
      system($command);
      exit(0)
   }
}

while (wait() != -1) {} #wait() will be -1 when the last child exits.

所以这将工作正常,并产生一个进程来处理每个命令.它将全部并行发生,如果这些命令完全独立则很好.

如果我突然有5000条命令可以运行怎么办?不假思索地分开那么多流程是不明智的.那么应该实施什么样的检查,以及如何实施?

)

解决方法

此外,如果您担心同时产生过多的分叉进程,您可以限制它们.

要么自己滚动(使用队列来保持“分叉”),要么更好,使用Parallel::ForkManager模块,它允许您通过构造函数参数限制同时分叉.

use Parallel::ForkManager;
$pm = new Parallel::ForkManager($MAX_PROCESSES);

请注意,ForkManager还将通过提供的“wait *”API为您收集已结束的子进程

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读