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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> многопоточный грабер. выйти из скрипта по die или как нибудь? 
:(
    Опции темы
burakov
Дата 9.4.2013, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Добрый день. 

есть многопоточный скрипт. грабер (LWP)
основаннный на реальных потоках

use threads;
use threads::shared;
use Thread::Queue;

который иногда умирает

как можно отследить -  почему?
везде понатыкал die (print );

но умирает поток. а все остальное несется. (в консоли дальше), ошибок не видно.
нужно чтобы если сработало какое то die, то останавливалось бы все приложение. (весь скрипт).
как это сделать?

пытался die (print ; exit;) -- не вышло.

что можно сделать?
спасибо.

Это сообщение отредактировал(а) burakov - 9.4.2013, 14:29


--------------------
Нотный архив http://libnote.ru скачать ноты бесплатно
PM MAIL   Вверх
infarch
Дата 10.4.2013, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Самое простое - запускать все опасное в eval, ловить ошибку и выставлять глобальный флаг остановки. Разумеется он должен периодически проверяться во всех потоках.
PM MAIL   Вверх
burakov
Дата 10.4.2013, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



про "глобальный флаг остановки" -- понял
про "проверять во всех потоках" -- понял

>>пускать все опасное в eval, 
Это более менее понятно


>>ловить ошибку
может пример какой есть?


и еще вопросик.
очевидно что проблемы мои начались, когда объем скриптов и их сложность стала более 1500 строк кода.
вероятно нужно прекращать писать "на коленке". хотя вроде все в классах, более менее я упорядочиваю. но все же. видно что то не так.

подскажите русско язычные книги про то как это все грамотно писать

работа с конфиг файлом // наверняка есть какие то готовые интересные решения, более грамотные, чем написал я сам

как правильно разбивать на части приложение (скрипт).
как это связывать между собой.
опять же работа с исключениями (ошибками)

то есть интересует какой то хелп., конкретный с примерами. 



спасибо.


--------------------
Нотный архив http://libnote.ru скачать ноты бесплатно
PM MAIL   Вверх
infarch
Дата 10.4.2013, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(burakov @  10.4.2013,  10:26 Найти цитируемый пост)
>>ловить ошибку
может пример какой есть?

Есть конечно. Вот тут: http://perldoc.perl.org/functions/eval.html.
Код

eval { $answer = $a / $b; }; warn $@ if $@;

Цитата(burakov @  10.4.2013,  10:26 Найти цитируемый пост)
то есть интересует какой то хелп., конкретный с примерами

Это вам надо уже общие концепции программирования учить, без связи с Перл. Паттерны, ООП и т.д.


PM MAIL   Вверх
DurRandir
Дата 10.4.2013, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну раз потоки, то хоть kill KILL => $$, хуже уже не сделает)
PM   Вверх
infarch
Дата 10.4.2013, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(DurRandir @  10.4.2013,  14:56 Найти цитируемый пост)
Ну раз потоки, то хоть kill KILL => $$, хуже уже не сделает) 

А может и сделает. Программисту виднее когда можно завершить работу потока без ущерба для системы. Так что флаг в расшаренной переменной - самое то.
PM MAIL   Вверх
DurRandir
Дата 10.4.2013, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Из блокирующего вызова он выйти всё равно не сможет, если там всё подвисло (вдруг). 
PM   Вверх
Loki
Дата 21.7.2013, 06:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Теперь у вас все работает?
Мне когда-то на perlmonks сказали что лучше вообще не использовать потоки в perl 5, форки еще куда не шло.
PM MAIL   Вверх
burakov
Дата 21.7.2013, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



не знаю как оно с потоками в принципе .. ибо однобоко их использую..
для грабера своего. но в нем они работают кроссплатформенно и очень устойчиво. несмотря на мой кривой код.
грабер может пахать неделю и более и все завершится . как нужно без ошибок.

по поводу отлова ошибок.
делаю exit;
в том месте, где ошибка предполагается. ну и принт. переменной, флага. или чего нибудь.
Таким образом скрипт останавливается, а я пытаюсь разобраться что там к чему.


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


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

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


 




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


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

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