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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запуск всех скриптов Perl кроме самого себя, в многопоточном режиме 
:(
    Опции темы
Suppir
Дата 25.3.2014, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Нет, виндовс стоит.


Еще есть такой вариант. Чтобы скрипт пускач запускал скрипты Perl в отдельных окнах. И пусть они там себе в консоль выводят, что хотят. Такой вариант возможен?


PM MAIL   Вверх
Bulat
Дата 25.3.2014, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

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



Цитата(Suppir @  25.3.2014,  13:32 Найти цитируемый пост)
Нет, виндовс стоит.


Если виндовс, то делай

Код

system($item." > $item.txt");


самое оптимальное решение, которое не принесет за собой другие проблемы!  smile 


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
Suppir
Дата 25.3.2014, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



К сожалению, не оптимальное. Каждый скрипт выдает log-файл. А теперь он еще и создает лишние txt-файлы.

Разве что стирать потом эти файлы в конце работы скрипта...

Добавлено через 3 минуты и 45 секунд
Короче, изменил код на следующий:

Код

use threads;
use Thread::Queue;

my $q = Thread::Queue->new();

if ($0 =~ /.+\\(.+)/){$myname = $1}

while(<*.pl>){
    $q -> enqueue($_) if $_ ne $myname;
}

my $thread_limit = 2; 

my @thr = map {
    threads->create(sub {
        while (defined (my $item = $q->dequeue_nb())){
            print "$item\n";
            system($item." > $item.temp")
        }
    });
} 1..$thread_limit;
$_->join() for @thr;

while(<*.temp>){unlink}


В файлы $item.temp пишется вывод STDOUT скриптов, а в конце скрипта пускач подчищает за собой эти темповые файлы.
PM MAIL   Вверх
Bulat
Дата 25.3.2014, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

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



Цитата(Suppir @  25.3.2014,  13:42 Найти цитируемый пост)
К сожалению, не оптимальное. Каждый скрипт выдает log-файл. А теперь он еще и создает лишние txt-файлы.

Разве что стирать потом эти файлы в конце работы скрипта... 


Ок. Если придумаешь надежное решение под виндовс по твоим требованиям - меня в соавторы!  smile 


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
Suppir
Дата 25.3.2014, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Договорились smile
PM MAIL   Вверх
tzirechnoy
Дата 25.3.2014, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

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



Цитата
Как?  


Например, 
Код
open(my $LOG, "-|",$item);
while (<$LOG>) { };

PM MAIL   Вверх
Romikgy
Дата 25.3.2014, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Код

system($item." > $item.temp && del $item.temp ")



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
alezzz
Дата 25.3.2014, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


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

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



А почему вывод перенаправляется с созданием нового файла? Может system($item." >> out.temp"), такой вариант не будет под windows блочить файл? А вообще действительно нехватает /dev/null smile

Еще можно вместо system использовать `` (qx//). Тут вывод в консоль не должен попадать.

Это сообщение отредактировал(а) alezzz - 25.3.2014, 19:28
PM MAIL   Вверх
Romikgy
Дата 25.3.2014, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Цитата(alezzz @  25.3.2014,  18:18 Найти цитируемый пост)
 /dev/null

linux - /dev/null
windows - null


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
alezzz
Дата 26.3.2014, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


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

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



Цитата(Romikgy @  25.3.2014,  22:30 Найти цитируемый пост)
windows - null

действительно есть, только nul, с одной "l"

Это сообщение отредактировал(а) alezzz - 26.3.2014, 00:05
PM MAIL   Вверх
Suppir
Дата 26.3.2014, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А может быть кто знает, как изящней вот это написать?

Код

if ($0 =~ /.+\\(.+)/){$myname = $1}


то есть получить имя скрипта без его пути. Например: c:/программы/test.pl - нужно получить "test.pl".
PM MAIL   Вверх
Bulat
Дата 26.3.2014, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

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



Suppir, сдается мне, что это строчка под юникс писалась!  smile 

А если попробовать исправить вот так:

Код

if ($0 =~ /.+\/(.+)/){$myname = $1}



--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
Suppir
Дата 26.3.2014, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Да нет, все под Windows написано и работает.

Я думал, может есть какая волшебная переменная для получения названия скрипта без его пути. 
PM MAIL   Вверх
Romikgy
Дата 26.3.2014, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Код

use File::Basename;
my $fname = basename($path);




--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
tzirechnoy
Дата 26.3.2014, 10:41 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

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



Цитата
А может быть кто знает, как изящней вот это написать?


Никак. Написать это изящно -- невозможно. И не потому, что регэкспы сложные или модулей нет, а потому, что пытаться отфильтровать себя по имени -- это само посебе кривость и плохо сказывается на переносимости. Это в общем мне интуитивно-очевидно, но и так я за пять минут наткнулся на три нюанса: другие слэшы в linux, необходимость под linux  запускать ./subscript.pl по причине отсутствие . в $PATH, привычка запускать perl runner.pl, которая тожэ привела к поломке.

Правильнее -- создать поддиректорию, куда положыть либо сам запускающий скрипт, либо наоборот тех, кого нужно выполнить.
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


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

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


 




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


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

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