Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Threads + nested child processes = блокировка? 
:(
    Опции темы
Pfailed
Дата 3.6.2011, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 22
Всего: 39



Цитата(_hunter @  3.6.2011,  20:02 Найти цитируемый пост)
Мне за максимально короткое время нужно выполнить пачку слабо зависящих друг-от-друга задач. Это, вроде-как, потоки "по книжке"

Судя по описанному вам нужно запустить внешние программы. Если дело происходит не в windows, то open с пайпом создает fork. Особого смысла выводить создание потомков в отдельные потоки не вижу. Если нужно получить вывод от запущенных программ используется select.


--------------------
PM MAIL   Вверх
EcSYZ
Дата 3.6.2011, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 79
Регистрация: 21.6.2007

Репутация: 1
Всего: 1



Цитата(_hunter @ 3.6.2011,  11:24)
...
( Windows XP, CLI, Perl 5.8.8)
...

внезапно ...
PM MAIL WWW   Вверх
Pfailed
Дата 3.6.2011, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 22
Всего: 39



windows, как известно, sux


--------------------
PM MAIL   Вверх
afiskon
Дата 4.6.2011, 07:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 31.3.2011
Где: Россия, Москва

Репутация: нет
Всего: 4



ТС, прочитайте внимательно perldoc, выясните разницу мужде джойнабл и детачед нитями и как ими пользоваться в Perl. 
PM MAIL WWW   Вверх
_hunter
Дата 6.6.2011, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: нет
Всего: 98



ОК, похоже мой "простой" пример увел нас не в ту сторону...
Попробуем с другим примером:
Код

log_msg("\t\t\tStarting thread\n");
threads->create(sub {
        my ($statusOut, @lines) = do_cmd(@_);
        return ($statusOut);
    }, $cmd)->join();
log_msg("\t\t\tThread finished\n");

где
Код

sub do_cmd
{
    my( $cmdIn )                   = shift;

    my( @linesOut )                = ();
    my( $statusOut )               = 0;

    my( $rval )                    = 0;
    my( $status )                  = 0;
    my( $cmd_name )                = '';
    my( $line )                    = '';

    #***************************************************************************
    #
    #  Issue the command
    #
    #***************************************************************************

    $status = open(CMD, "$cmdIn 2>&1 |" );

    if ( $status )
    {
        @linesOut = <CMD>;

        close(CMD);

        #***************************************************************************
        #
        #  Get return value of shell command.
        #
        #***************************************************************************

        $rval      = $?;
        $statusOut = $rval / 256;

        if ($statusOut)
        {
            log_msg( "$0: do_cmd: ERROR: The command failed: Return Value = $rval, Return Code = $statusOut\n" );

        }
    }

    #***************************************************************************
    #
    #  The open failed
    #
    #***************************************************************************

    else
    {
        log_msg( "$0: do_cmd: ERROR: The command could not be executed.\n" );

        $statusOut = 1;
    }

    return( $statusOut, @linesOut );

}   ## end -- do_cmd()



--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1797 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.