正确使用ForkManager和Perl?

时间:2014-11-23 21:39:59

标签: perl

我的开发人员最近失踪了,我需要对我的网站进行一些小改动。

以下是我将要提到的代码:

my $process = scalar(@rows);
$process = 500 if $process > 500;
my $pm = Parallel::ForkManager->new($process);

这是来自Perl脚本的代码,它通过cron作业从API系统中删除数据。每次运行cron作业时,它都会为该文件打开大量进程。例如,cron-job.pl将运行100次以上。

它打开的实例数量取决于需要检查的数据量,因此每次都不同,但似乎永远不会超过500.上面的代码会导致这种情况发生吗?

我不熟悉使用ForkManager,但是从我所做的研究来看,它看起来像是多次运行同一个文件,这样它就会从API系统中提取多个数据流时间。

问题是正在运行的实例数量显着减慢了服务器的速度。要降低实例数量,是否真的很简单,只需将500更改为较低的数字,或者我错过了哪些内容?

2 个答案:

答案 0 :(得分:1)

要降低创建的实例数,是的,只需将500(在两种情况下)降低到其他值。

Parallel::ForkManager是一种使用fork(生成新进程)来处理并行处理的方法。传递给new()的参数指定要创建的最大并发进程数。

答案 1 :(得分:0)

您的代码简化为

my $pm = Parallel::ForkManager->new(500);

这意味着:在任何给定时间将孩子数量限制为500个。

  • 如果您的工作少于500个,则只会创建那么多工人。
  • 如果您有超过500个工作,经理将开始500个工作,等待一个工作完成,然后开始下一个工作。

如果您希望在任何给定时间执行更少的孩子,请降低该数字。

my $pm = Parallel::ForkManager->new(50);