Форум сайта python.su
Есть родительский класс в нём запускаем поток. Можно ли в родительском классе поймать ошибку дочернего потока? Что-то наподобие ниже приведённого.
try:
self.thr = SomeThreadClass()
time.sleep(1)
self.thr.start()
except Exception, error:
print str(error)
class SomeThreadClass:
def run(self):
try:
some_action()
except Exception, error:
raise Exception('Some action failed')
Офлайн
Практика показывает, что только сообщением через queue или pipe.
Офлайн
а с родительским классом ничего не случится (не выпадет) если в дочернем вылетит except не прекрытый через try..except ?
Офлайн
Обычно нет, дохнет только нитка.
Офлайн
Может кто ещё ссылочку подкинет на пример использования Queue для передачи исключений.
Офлайн
Ну так в чем проблема?
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
from multiprocessing import Queue, Process
class MyMegaException(Exception): pass
def deadlytask(queue):
queue.put(MyMegaException("Kranty 6"))
def main():
queue = Queue()
task = Process(target=deadlytask, args=(queue,))
task.start()
while task.is_alive():
data = queue.get()
raise data
if __name__ == '__main__':
main()
Офлайн