2013-02-25 2 views
1

Я пытаюсь запустить скрипт perl с потоками, используя метод detach. Приложение должно работать постоянно, 24/7. Я пытаюсь использовать this example.Безопасные потоки perl

Но когда я запустил этот пример за более длительный период времени, выясняется, что существует постоянное увеличение памяти памяти . Как я могу избежать этого? Как я могу использовать метод threads->detach без увеличения памяти?

+0

В потоках Perl не очень хорошая репутация ... возможно, пришло время найти другое решение для вашего приложения, не могли бы вы объяснить это? –

+0

ничего особенного, приложение, выполняющее несколько задач паралелла, но не двойное исполнение в одно и то же время. Это должна быть концепция босса/работника, так как я хочу контролировать процессы. – Joe

ответ

1

Другим подходом может быть использование модуля Parallel::ForkManager (простой диспетчер вилок параллельной обработки). Я использовал его, и я выполняю свою работу (длительные процессы без утечек памяти).

+0

Переход от потоков к процессам не поможет утечке памяти. – ikegami

+0

P :: FM не создает длительные процессы. Он работает только в том случае, если процессы заканчиваются периодически. – ikegami

+0

Спасибо, думаю, я попробую fork вместо потоков. – Joe

0

Можете ли вы разместить свой код или что вы пытаетесь отсоединить?

Вам не нужно использовать pool.pl только для запуска отдельной программы.

Простейшим вы можете сделать, это

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


###loop main prog 

my $detach_thread = threads->create(

    sub { 
     # DO YOUR STUFF here 
      return; 
     } 

); 

$detach_thread->detach(); 

Другой альтернативой для рассмотрения работает в фоновом режиме (в UNIX: yourcommand &).

+0

Если вы запускаете приведенный выше код в бесконечном цикле, вы можете заметить постоянное увеличение памяти .... это даже случай с примером, описанным здесь: http://cpansearch.perl.org/src/JDHEDDEN/threads- 1.86/examples/pool.pl – Joe

+0

wht версия perl вы используете, я ее не вижу –

+0

Это 5.10.1 на linux 2.6.32 ... – Joe

Смежные вопросы