2014-11-23 2 views
0

내 개발자가 최근에 사라졌고 웹 사이트를 약간 변경해야합니다.ForkManager와 Perl을 올바르게 사용하고 있습니까?

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

이 cron 작업을 통해 API 시스템에서 데이터를 긁힌 자국 펄 스크립트 코드 :

는 여기에 내가 언급됩니다 코드입니다. cron 작업이 실행될 때마다 해당 파일에 대해 많은 프로세스가 시작됩니다. 예를 들어 cron-job.pl은 100 회 이상 실행됩니다.

열리는 인스턴스의 수는 검사해야 할 데이터의 양에 따라 다르므로 매번 다를 수는 있지만 결코 500을 초과하지는 않습니다. 코드가 위의 원인 일 수 있습니까?

ForkManager를 사용하는 것에 익숙하지 않지만 동일한 파일을 여러 번 실행하는 것처럼 보이는 연구에서 API 시스템의 여러 데이터 스트림을 모두 추출 할 것입니다. 같은 시간.

문제는 실행중인 인스턴스의 수가 서버 속도를 크게 저하시키는 것입니다. 인스턴스 수를 줄이려면 500을 낮은 숫자로 변경하거나 실제로 놓친 것처럼 간단합니까?

답변

0

코드는 뜻

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

에 단순화합니다.

  • 500 개 미만의 작업이있는 경우 많은 근로자 만 생성됩니다.
  • 500 개가 넘는 작업이있는 경우 관리자는 500 개의 작업을 시작하고 완료 될 때까지 기다린 후 다음 작업을 시작합니다.

주어진 시간에 더 적은 수의 자식을 실행하려면 해당 숫자를 낮추십시오.

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

생성 된 인스턴스 수를 줄이려면 예 (두 경우 모두)를 다른 것으로 낮추십시오.

Parallel::ForkManager은 병렬 처리를 처리하기 위해 fork (새 프로세스 생성)를 사용하는 방법입니다. new()에 전달 된 매개 변수는 만들 동시 프로세스의 최대 수를 지정합니다. 주어진 시간에 500 어린이의 수를 제한 :

+1

최대 _concurrent_ 프로세스입니다. 위의 예에서 한 번만 말하면 10,000 개가 계속 실행되지만 한 번에 500 개만 실행됩니다. – Sobrique

관련 문제