2014-11-23 93 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