2013-06-12 2 views
3

У меня есть класс подклассы threading.thread. В демоне, который инициализирует объекты потока, я периодически проверяю статус потока. Если статус не завершен, а поток неактивен, это означает, что произошла ошибка в выполнении чего-то вроде вызова api на другой сервер.сделать копию мертвой темы

Вопрос в том, возможно ли это сделать копию объекта потока и вызвать метод запуска. Я рассмотрел возможность вызова метода run снова на исходном объекте, но это испортило бы рабочий процесс демона.

Любые идеи очень ценятся!

C

ответ

1

Поместите бесконечный цикл в демона и проверьте/метод IsAlive() is_alive(), если что-то пошло не так. Если он только что запустил новый объект, используя одни и те же значения.

Еще один способ решить вашу проблему - поймать реальную проблему внутри объекта потока и просто позаботиться о проблеме там. Я предполагаю, что у вас есть цикл в методе run(). Просто поставьте все в цикле в предложении try/except, которое будет повторно инициализировать все, что вы делаете, чтобы проверить другие серверы.

Что-то вроде этого:

def run(self): 
    while 1: 
     try: 
      if not server.isconnected(): 
       server.connect() 

      server.getsomeinfo() 
     except server.error as x: 
      server.disconnect() 

     time.sleep(1) 

Это будет восстановить, как только это ошибка типа server.error. Вы можете сделать решение намного красивее и добавить несколько интервалов перед повторной попыткой и т. Д. Я сделал именно это, и он отлично работает.

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