2017-09-11 6 views
0

J'ai été à la recherche d'horaires différents en Python tels que Sched (Im un utilisateur Windows) etc Cependant, je ne peux pas vraiment saisir et je ne sais pas si c'est possible. Mon plan est de faire comme l'image ci-dessous:Planifier à temps donné pendant qu'une fonction s'exécute - Python

My own UML

Nous pouvons voir à temps: 00,21 est etc le temps que je veux que le programme pour faire la fonction 2, mais la fonction 1 doit être ajouter dans une liste I en avoir fait autant que possible dans la liste car cela fonctionne dans les 2 minutes qui précèdent la frappe du chronomètre. Fondamentalement ...

La fonction 1 fait sa fonction 2 minutes avant le temporisateur. Quand il frappe 00:21 alors arrêtez la fonction 1 et faites la fonction 2 où il prend la liste et l'utilise dans sa propre fonction et quand c'est fait puis c'est fait.

Cependant, je ne sais pas comment faire ou commencer. Je pensais faire une minuterie, mais j'ai l'impression que ce n'est pas la solution. que proposez-vous les gars?

Répondre

0

Je pense que j'aborderais un problème comme celui-ci en créant une classe qui sous-classe threading.Thread. À partir de là, vous remplacez la méthode run par la fonction que vous souhaitez exécuter, ce qui dans ce cas mettra les éléments dans une liste. Ensuite, dans main, vous démarrez ce thread suivi d'un appel à sleep. La classe ressemblerait à ceci:

class ListBuilder(threading.Thread): 
    def__init__(self): 
     super().__init__() 
     self._finished = False 

     self.lst = [] 

    def get_data(): 
     # This is the data retrieval function 
     # It could be imported in, defined outside the class, or made static. 

    def run(self): 
     while not self._finished: 
      self.lst.append(self.get_data()) 

    def stop(self): 
     self._finished = True 

Votre main serait alors ressembler à quelque chose comme

import time 

if __name__ == '__main__': 
    lb = ListBuilder() 
    lb.start() 

    time.sleep(120) # sleep for 120 seconds, 2 minutes 

    lb.stop() 
    time.sleep(.1) # A time buffer to make sure the final while loop finishes 
        # Depending on how long each while loop iteration takes, 
        # it may not be necessary or it may need to be longer 

    do_stuf(lb.lst) # performs actions on the resulting list 

Maintenant, tout ce que vous avez à faire est d'utiliser le Planificateur de tâches Windows pour exécuter à 00h19 et vous devrait être réglé.

+0

Merci beaucoup! C'était la réponse que je cherchais! :) – Andres123