LINUX.ORG.RU

[python] как бы обернуть весь скрипт в один try-except?

 


0

1

есть скрипт, который сначала порождает 3-4 потока для служебных задач, + 1 Thread() из multiprocessing, а затем запускает 800 обычных Thread()

все это дело довольно долго работает, а потом умирает.

вот как бы перехватить ошибку или исключение из-за которого он мрёт?
возможно на уровне ОС.
чтобы он не умирал молча, а оставлял хоть какой-нибудь намёк на причину

Питон изучаю недавно, но такое будет работать

#runscript.py
import script

try:
 script.run()
except ....
Или как вариант в каждом потоке делать try:...except.. и выводить где ошибка и какая.

ymuv ★★★★
()

вот как бы перехватить ошибку или исключение из-за которого он мрёт?

Стопудово там будет:

YouAreAnEpicIdiotException: don't hurt me anymore. Your server
baverman ★★★
()

было:

a = 1 / 0

стало:

def main():
    a = 1 / 0

# подгузник
try:
    main()
except Exception, e:
    print e

GateKeeper ★★
()

мне кажется ваш сервер не тянет 800 трэдов, поэтому падает без эксепшенов

anonymous
()
Ответ на: комментарий от anonymous

няша, если б ты еще список этих книжек умных привел...

anonymous
()

А с чем связано странное желание родить 800 обычных тредов? Так вообще то в каждом треде надыть вешать свой try, но если оно дохнет молча я не уверен что это поможет... потому как и без try сообщения то идут:

>>> import thread
>>> def f() : a=1/0
>>> thread.start_new_thread(f,())
139701278734080
>>> Unhandled exception in thread started by <function f at 0x7f0ebeeb57d0>
Traceback (most recent call last):
  File "<stdin>", line 1, in f
ZeroDivisionError: integer division or modulo by zero
AIv ★★★★★
()

а как насчёт логов в файл?

dimon555 ★★★★★
()

Кстати, я надеюсь вы в курсе, что эти 800 потоков будут выполняться последовательно, а не параллельно (кроме случая, если они на самом деле большую часть времени сидят в C-ном коде): http://dabeaz.com/python/UnderstandingGIL.pdf

Ivanz
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.