2010-04-28 6 views
2

Je souhaite écrire un utilitaire de ligne de commande pouvant être utilisé pour synchroniser l'exécution des programmes sur différentes consoles.Utilitaire de sémaphore de ligne de commande

Console A: 
$ first_program && semaphore -signal 

Console B: 
$ semaphore -wait && second_program 

Le premier programme prend beaucoup de prendre pour compléter. Le deuxième programme ne peut démarrer que lorsque le premier programme est terminé.

De quel objet de synchronisation ai-je besoin pour implémenter ceci?

+0

J'ai écrit un [utilitaire de ligne de commande] (http://stefan-klinger.de/tools/sem/) pour les sémaphores Linux nommés. –

Répondre

5

Vous n'avez pas besoin d'utiliser Python pour cela. Considérant que vous utilisez Unix, essayez ceci:

D'abord, créez un tuyau pour le sémaphore.

mknod /tmp/semaphore p 

Ensuite, les programmes:

Console A: 
$ first_program && echo a > /tmp/semaphore 

Console B: 
$ read < /tmp/semaphore && second_program 

En fait, cette méthode fonctionne dans les deux sens. La lecture bloquera jusqu'à ce qu'il y ait une écriture, et vice versa.

+0

Était sur le point d'écrire exactement la même chose en utilisant 'mkfifo' :) –

0

S'ils sont sur la même machine, le premier programme peut toucher un fichier temporaire.

Il existe un module Gamin en python qui permettra à votre second programme de rester assis là et d'attendre sans avoir besoin d'attacher de ressources. Ce n'est pas une attente occupée, ou faire quelque chose avec le sommeil ou des trucs comme ça.

Questions connexes