Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Подскажите по тредам


Автор: Suppir 28.4.2011, 15:28
Есть скрипт:

Код

$path = "f:\\master\\data\\data";
system (".\\tools\\dump.exe " .$path. " Force > priority.dump");
system (".\\tools\\dump.exe -s " .$path. " PublishedIn 0 > publishedin.dump");


Он запускает два раза утилиту dump.exe с разными параметрами. Утилита работает два раза по часу (т.е. два часа). На компьютере 2 ядра, работает только 50%.  Как запустить эти два процесса одновременно?


Автор: DurRandir 28.4.2011, 16:15
fork+exec, можно ещё сделать setsid, если родителю не надо ждать детей. Если надо, причём заблокироваться на время ожидания, то вызвать в исходном процессе waitpid 2 раза.

Автор: OutlawZ 28.4.2011, 16:23
Используйте use Threads;
Что то в этом роде.
Код

use Threads;

....

$net_o = threads->new(system(".\\tools\\dump.exe " .$path. " Force > priority.dump"));
$net_t  = threads->new(system(".\\tools\\dump.exe " .$path. " Force > priority.dump"));

.....


Для более больших подробностей смотрите perldoc Threads

Автор: Suppir 28.4.2011, 16:23
А как реализовать самым простым способом? Следить за окончанием работы не нужно. Всего лишь нужно тупо создать два процесса:

system (".\\tools\\dump.exe " .$path. " Force > priority.dump")
и 
system (".\\tools\\dump.exe -s " .$path. " PublishedIn 0 > publishedin.dump")

Добавлено через 29 секунд
OutlawZ, 

спасибо, то что нужно!

Автор: Pfailed 28.4.2011, 17:20
Цитата(DurRandir @ 28.4.2011,  16:15)
fork+exec, можно ещё сделать setsid, если родителю не надо ждать детей. Если надо, причём заблокироваться на время ожидания, то вызвать в исходном процессе waitpid 2 раза.

Это всё работает в windows?

Добавлено через 4 минуты и 4 секунды
Цитата(OutlawZ @ 28.4.2011,  16:23)
Используйте use Threads;
Что то в этом роде.
Код

use Threads;

....

$net_o = threads->new(system(".\\tools\\dump.exe " .$path. " Force > priority.dump"));
$net_t  = threads->new(system(".\\tools\\dump.exe " .$path. " Force > priority.dump"));

.....


Для более больших подробностей смотрите perldoc Threads

threads он, а не Threads. Это спасибо windows за регистронезависимость в именах файлов, а в более нормальной системе такой трюк уже не удастся.

Автор: OutlawZ 28.4.2011, 17:34
Цитата

threads он, а не Threads. Это спасибо windows за регистронезависимость в именах файлов, а в более нормальной системе такой трюк уже не удастся. 


Может дело в Active Perl ? smile, потому что модуль HTTP::Template если пропишу HTTP::template то уже он его не находит smile. 

Автор: Pfailed 28.4.2011, 18:06
Цитата(OutlawZ @ 28.4.2011,  17:34)
Может дело в Active Perl ? smile, потому что модуль HTTP::Template если пропишу HTTP::template то уже он его не находит smile.

Не встречал модуля HTTP::Template. HTML::Template возможно. Но это всё равно, в windows можно написать хоть
Код

use HtMl::TeMpLaTe;


Другое дело, что при использовании, такое уже не пройдет и нужно указывать верное имя
Код

my $tpl = HTML::Template->new();


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)