2014-11-23 59 views
0

我最近开发商消失,我需要做一个小的变化到我的网站。正确使用ForkManager和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到一个较低的数字还是我失去了一些东西?

回答

0

您的代码可以简化为

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

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

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

如果你想少生孩子执行任何给定的时间,降低这个数字。

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

为了降低创建,是的情况下,仅仅降低500到别的东西的数量,(在这两种情况下)。

Parallel::ForkManager是使用叉(产卵新过程)来处理的并行处理的方式。传递给new()的参数指定了要创建的最大并发进程数。

+1

这是max_concurrent_进程。如果你告诉它,它仍然会做10000次,但在上面的例子中 - 一次只能运行500次。 – Sobrique 2014-11-23 23:11:11