|
Модераторы: ginnie, korob2001 |
|
burakov |
|
|||
Опытный Профиль Группа: Участник Сообщений: 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 |
|||
|
||||
infarch |
|
|||
Опытный Профиль Группа: Участник Сообщений: 526 Регистрация: 13.3.2009 Репутация: нет Всего: 1 |
Самое простое - запускать все опасное в eval, ловить ошибку и выставлять глобальный флаг остановки. Разумеется он должен периодически проверяться во всех потоках.
|
|||
|
||||
burakov |
|
|||
Опытный Профиль Группа: Участник Сообщений: 554 Регистрация: 28.7.2006 Репутация: нет Всего: нет |
про "глобальный флаг остановки" -- понял
про "проверять во всех потоках" -- понял >>пускать все опасное в eval, Это более менее понятно >>ловить ошибку может пример какой есть? и еще вопросик. очевидно что проблемы мои начались, когда объем скриптов и их сложность стала более 1500 строк кода. вероятно нужно прекращать писать "на коленке". хотя вроде все в классах, более менее я упорядочиваю. но все же. видно что то не так. подскажите русско язычные книги про то как это все грамотно писать работа с конфиг файлом // наверняка есть какие то готовые интересные решения, более грамотные, чем написал я сам как правильно разбивать на части приложение (скрипт). как это связывать между собой. опять же работа с исключениями (ошибками) то есть интересует какой то хелп., конкретный с примерами. спасибо. |
|||
|
||||
infarch |
|
|||
Опытный Профиль Группа: Участник Сообщений: 526 Регистрация: 13.3.2009 Репутация: нет Всего: 1 |
Есть конечно. Вот тут: http://perldoc.perl.org/functions/eval.html.
Это вам надо уже общие концепции программирования учить, без связи с Перл. Паттерны, ООП и т.д. |
|||
|
||||
DurRandir |
|
|||
Опытный Профиль Группа: Участник Сообщений: 335 Регистрация: 27.9.2009 Репутация: нет Всего: 17 |
Ну раз потоки, то хоть kill KILL => $$, хуже уже не сделает)
|
|||
|
||||
infarch |
|
|||
Опытный Профиль Группа: Участник Сообщений: 526 Регистрация: 13.3.2009 Репутация: нет Всего: 1 |
||||
|
||||
DurRandir |
|
|||
Опытный Профиль Группа: Участник Сообщений: 335 Регистрация: 27.9.2009 Репутация: нет Всего: 17 |
Из блокирующего вызова он выйти всё равно не сможет, если там всё подвисло (вдруг).
|
|||
|
||||
Loki |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 244 Регистрация: 9.7.2006 Репутация: нет Всего: нет |
Теперь у вас все работает?
Мне когда-то на perlmonks сказали что лучше вообще не использовать потоки в perl 5, форки еще куда не шло. |
|||
|
||||
burakov |
|
|||
Опытный Профиль Группа: Участник Сообщений: 554 Регистрация: 28.7.2006 Репутация: нет Всего: нет |
не знаю как оно с потоками в принципе .. ибо однобоко их использую..
для грабера своего. но в нем они работают кроссплатформенно и очень устойчиво. несмотря на мой кривой код. грабер может пахать неделю и более и все завершится . как нужно без ошибок. по поводу отлова ошибок. делаю exit; в том месте, где ошибка предполагается. ну и принт. переменной, флага. или чего нибудь. Таким образом скрипт останавливается, а я пытаюсь разобраться что там к чему. |
|||
|
||||
Правила форума "Perl: Системное программирование" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Системное программирование | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |