2012-03-13 2 views
1

Я использую версию python libtorrent. Когда я запускаю торрент-сессии в течение более длительного времени с большим количеством файлов, он падает с ошибкой:Оберните функцию в поток и проигнорируйте критические ошибки

terminate called after throwing an instance of 'boost::lock_error' 
    what(): boost::lock_error 

так, я думал, будет обернуть функцию, связанные с торрента в отдельном потоке и когда он выходит из строя, он будет убивать только нить (вместо всего приложения):

from threading import Thread 

class TWrapper (Thread) : 
    # ... 
    def run(self): 
     try: 
      run_torrent_stuff() 
     except: 
      # print message 
      pass 


t = TWrapper() 
t.run() 
t.join() 
# check if all OK with t, if not - restart again 

Я подумал, что если библиотеки аварий, поток будет умереть, и я join его в главном цикле. Но, когда libtorrent падает, все приложение умирает :(

Почему ошибка обостряется вне резьбы?

(libtorrent пример (в реальной жизни), вопрос в целом)

+0

«Почему ошибка возникает из-за потока?» - возможно, исключение возникает в каком-то другом потоке, возможно, на libtorrent internal thread/pool? –

ответ

2

Обычно, если ничейных сбоев, это приводит к сбою процесса, если вы хотите, чтобы он не запускал libtorrent в отдельном процессе.

+0

Я попробовал 'mutiprocessing.Process' clas s, позвольте подождать и посмотреть ... –

Смежные вопросы