2010-12-09 3 views
0

У меня есть метод destroy(), который вызывается до того, как мой поток спускается.Почему метод python не возвращается?

def destroy(self): 
    self.logger.debug("Instance is being destroyed") 
    //do stuff 
    self.logger.debug("Instance has been destroyed") 

Это код, откуда он называется:

if (__name__ == '__main__'): 
try:   
    instance = device_instance()    
     while True: 
      //do stuff 
      if input_string == 'destroy': 
       instance.destroy() 
       logger.debug("Back in main after destroying") 
       break 
      else: 
       //do stuff 
      time.sleep(.100) 
except Exception, ex: 
    logger.debug("Exception occurred" + str(ex)) 
except: 
    logger.debug("Unhandled exception occurred") 

Теперь, когда я запускаю его, проблема я вижу вход заявления «Instance уничтожается» и «Instance был разрушен» и я не вижу «Back in main после уничтожения». Это означает, что мой destroy() никогда не возвращается. Я попытался добавить явный оператор return, по-прежнему та же проблема. Если я добавлю sys.exit (0) для destroy() в конце, он вызывает исключение, которое в конечном итоге попадает в main. В чем может быть проблема?

+1

Вам не нужна скобка вокруг `__name__ == '__main __'`; на самом деле, они выглядят неправильно. – katrielalex 2010-12-09 21:38:04

+0

Он работает в обоих направлениях - с круглой скобкой или без нее. – quest 2010-12-09 22:12:46

+0

Все, Спасибо за помощь. Я узнал, что один из моих сверстников начал называть уничтожение моей нити, надеясь, что это остановит мой поток, но на самом деле у меня был отдельный метод остановки, который вызывал бы разрушение, а затем поток выходил. Ошибки парного программирования, я думаю! – quest 2010-12-09 22:18:12

ответ

1

Ваш уровень журнала выше для отладки? Попробуйте с print

Также попробуйте добавить журнал перед вызовом.

1

Я думаю, что нам нужно немного больше информации, чем это - вероятно, о контексте «делать что-то» и input_string

я положил это в кусок кода:

import logging                       
import time                        

logger = logging.getLogger('')                   

class device_instance(object):                   

    def destroy(self):                     
     self.logger.warning('Instance is being destroyed')            
     # do stuff                      
     self.logger.warning('Instance is destroyed')              

input_strings = ['one', 'two', 'destroy']                

if (__name__ == '__main__'):                    
    logging.basicConfig()                    
    try:                         
     instance = device_instance()                  
     instance.logger = logger                   

     gen = input_strings.__iter__()                 

     while True:                      
      #do stuff                     
      try:                       
       input_string = gen.next()                
      except StopIteration:                  
       input_string = 'destroy'                 

      if input_string == 'destroy':                
       instance.destroy()                  
       logger.warning("Back in main after destroying")           
       break                     
      else:                      
       time.sleep(.100)                   
    except:                        
     logger.exception("Unhandled exception occurred") 

Этот выходы, что вы ожидаете:

WARNING:root:Instance is being destroyed                  
WARNING:root:Instance is destroyed                   
WARNING:root:Back in main after destroying 

Так что я думаю, что-то еще в игре.

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