2013-02-25 32 views
1

我想用線程使用detach方法來運行perl腳本。應用程序 應該永久運行,24/7。我正在嘗試使用this example安全Perl線程

但是,當我運行這個例子在一個較長的時間段內,事實證明,有一個不斷 增加內存。我怎樣才能避免這種情況?如何在不增加內存的情況下使用threads->detach方法?

+0

Perl線程沒有很好的聲譽......也許是時候爲你的應用程序找到另一個解決方案了,你能解釋一下嗎? – 2013-02-25 20:26:31

+0

沒什麼特別的,一個應用程序運行幾個並行任務,但同時沒有雙重執行。它應該是一個老闆/員工的概念,因爲我想控制過程。 – Joe 2013-02-25 20:33:26

回答

1

另一種方法可能是使用Parallel::ForkManager模塊(一個簡單的並行處理分叉管理器)。我已經使用它並且完成了我的工作(長時間運行的進程沒有內存泄漏)。

+0

從線程切換到進程不會幫助內存泄漏。 – ikegami 2013-02-26 04:07:53

+0

P :: FM不會創建長時間運行的進程。它只有在進程週期性結束時纔有效。 – ikegami 2013-02-26 04:08:53

+0

謝謝,我想我嘗試叉而不是線程。 – Joe 2013-02-26 19:59:09

0

你可以發佈你的代碼或你想分離的東西嗎?

你不需要使用pool.pl來運行一個獨立的程序。

,你可以做最簡單的是(在UNIX:yourcommand &

use threads; 
use threads::shared; # if required, 


###loop main prog 

my $detach_thread = threads->create(

    sub { 
     # DO YOUR STUFF here 
      return; 
     } 

); 

$detach_thread->detach(); 

考慮在後臺正在運行的其他替代方案。

+0

如果你在一個無限循環中運行上面的代碼,那麼你可能會注意到內存的永久增加......即使是在這裏描述的例子的情況下:http://cpansearch.perl.org/src/JDHEDDEN/threads- 1.86/examples/pool.pl – Joe 2013-02-25 20:37:40

+0

你使用的是哪個版本的perl,我沒有看到它 – 2013-02-25 22:09:32

+0

它是linux 2.6.32上的5.10.1 ... – Joe 2013-02-26 13:49:56