如何在Perl中管理fork池?

6 perl logic fork

我正在设置一些东西,以"批量"方式将SSH输出到多个服务器.我基本上想要一次维护5个连接,当一个连接打开另一个连接时(遵循一系列服务器IP).

我想知道这样的事情我应该使用fork()吗?如果是这样,我可以使用什么逻辑来确保我一次维持5个孩子?

kbe*_*son 11

分叉(或线程)是你想要的,但你应该看看CPAN的模块,它将提供你需要的大部分内容,以防止你重新发明轮子并经历你需要做的学习的痛苦.

例如,Parallel :: ForkManager看起来就像你想要的那样.

use Parallel::ForkManager;

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

foreach $data (@all_data) {
  # Forks and returns the pid for the child:
  my $pid = $pm->start and next; 

  ... do some work with $data in the child process ...

  $pm->finish; # Terminates the child process
}
Run Code Online (Sandbox Code Playgroud)


mob*_*mob 5

有几个模块可以解决这个问题.例如,参见Parallel :: ForkManager,Forks :: Super或Proc :: Queue.