2016-05-21 3 views
1

J'ai un programme python qui doit fonctionner 24/7. Il dort environ 10% du temps par intervalles de 30 secondes. Y a-t-il un moyen d'arrêter le programme et de recommencer en toute sécurité afin que le redémarrage ne se fasse que pendant le sommeil?Redémarrer un programme python pendant le sommeil en toute sécurité?

Voici un échantillon du code, la fonction main() et mise en œuvre:

# ============================================================================= 
# MAIN 
# ============================================================================= 

def main(): 
    while True: 
     checkReply = Reply() 
     checkReply.time_to_reply() 
     checkReply.search_db() 
     time.sleep(10) 


# ============================================================================= 
# RUNNER 
# ============================================================================= 
print "start" 
if __name__ == '__main__': 
    main() 
+0

Oui, je peux vous montrer comment faire cela, mais vous devez poster votre code. Au moins un exemple montrant le flux de contrôle du programme. – Will

+0

Merci, j'espère que ce n'est pas trop et laid de passer au peigne fin. https://github.com/SIlver--/remindmebot-reddit –

Répondre

2

Une façon serait de changer votre main() à quelque chose comme ceci:

def main(): 
    restart_file = config.get('some_section', 'restart_file') 
    while True: 
     checkReply = Reply() 
     checkReply.time_to_reply() 
     checkReply.search_db() 
     time.sleep(10) 
     if os.path.exists(restart_file): 
      os.unlink(restart_file) 
      if 0 == os.fork(): 
       os.execl(shlex.split('command to run the updated program')) 
      sys.exit('restarting') 

Pour le crédit ajouté utilisez quelque chose comme https://pypi.python.org/pypi/python-daemon/ pour que votre programme se démonise au démarrage. Puis, pour redémarrer votre programme lors de son prochain sommeil, il suffit de toucher le fichier de redémarrage. Vous pouvez définir son chemin d'accès à ce que vous voulez dans votre fichier de configuration.