2017-08-16 4 views
0

Fondamentalement, je veux faire en sorte qu'une seule instance de mon programme puisse être exécutée en même temps. Une recherche google rapide a trouvé this solution pour empêcher l'exécution de deux instances d'un programme, que j'ai adapté ci-dessous pour attendre que l'instance précédente soit terminée avant de s'exécuter. Cependant, cela ne respecte pas vraiment l'heure à laquelle un programme a été appelé. Par exemple, disons que j'exécute ce programme à 10h00 et qu'il dure 5 minutes. Ensuite, dites que je lance ce programme à 10h01 et à 10h02. Il n'y a aucune garantie que l'instance exécutée à 10:01 sera la première à s'exécuter.File d'attente d'instances d'un programme en Python?

Je voudrais créer une file d'attente à l'heure, où le premier appel au programme fait est celui qui sera exécuté ensuite. Y a-t-il une solution facile à cela? J'imagine que chaque programme écrit/supprime son ID de processus dans un fichier journal au démarrage/à l'achèvement et vérifie s'il est dans le journal, mais cela semble plutôt inélégant.

+0

S'il vous plaît expliquer plus profondément: _ ** cela ne respecte pas vraiment le moment où un programme a été appelé ** _ – stovfl

+0

Ajout d'un exemple. –

Répondre

0

Je pourrais imagin les éléments suivants:

pseudocode

def Signal_Handler(signal): 
    FIFO.push(signal.job_data) 

def main(job_data): 
    while True: 
    process_Job(job_data) 
    job_data = FIFO.pop() 
    if not job_data: 
     break 

if __name__ == '__main__': 
    job_data = sys.argv[1] 
    if Lock_Programm(): 
     # First Instance 
     Signal.Handler(SIG_USR1, Signal_Handler) 
     main(job_data) 
     Unlock_Programm() 

    else: 
     # Lock failed other Instance is running 
     Signal.signal(SIG_USR1, job_data) 
     exit(1)