Une façon d'effectuer une attente non bloquante est d'utiliser l'option threading.Event :
import threading
dummy_event = threading.Event()
dummy_event.wait(timeout=1)
Il peut s'agir set()
d'un autre fil pour indiquer que quelque chose s'est terminé. Mais si vous faites des choses dans un autre thread, vous pouvez éviter le timeout et l'événement et vous contenter de join
l'autre fil :
import threading
def create_the_file(completion_event):
# Do stuff to create the file
def Main():
worker = threading.Thread(target=create_the_file)
worker.start()
# We will stop here until the "create_the_file" function finishes
worker.join()
# Do stuff with the file
Si vous voulez un exemple d'utilisation d'événements pour un contrôle plus fin, je peux vous le montrer...
L'approche threading ne fonctionnera pas si votre plateforme ne fournit pas le module threading. Par exemple, si vous essayez de remplacer le module dummy_threading, dummy_event.wait()
revient immédiatement. Il n'est pas certain que le join()
l'approche.
Si vous attendez que d'autres processus se terminent, il est préférable de les gérer à partir de votre propre script en utilisant la commande sous-processus (et ensuite, par exemple, en utilisant le module wait
pour s'assurer que le processus est terminé avant de poursuivre le travail).
Si vous ne pouvez pas gérer le sous-processus à partir de votre script, mais que vous connaissez le PID, vous pouvez utiliser la commande os.waitpid()
fonction. Il faut se méfier de la OSError
si le processus est déjà terminé au moment où vous utilisez cette fonction...
Si vous souhaitez un moyen multiplateforme de surveiller un répertoire pour être averti de la présence de nouveaux fichiers, je vous suggère d'utiliser un fichier de type Contrôleur de fichiers de l'OIG de PyGTK/PyGObject . Vous pouvez obtenir un moniteur sur un répertoire à l'aide de la fonction répertoire_moniteur d'un Fichier GIO .
Exemple de code rapide pour la surveillance d'un répertoire :
import gio
def directory_changed(monitor, file1, file2, evt_type):
print "Changed:", file1, file2, evt_type
gfile = gio.File(".")
monitor = gfile.monitor_directory(gio.FILE_MONITOR_NONE, None)
monitor.connect("changed", directory_changed)
import glib
ml = glib.MainLoop()
ml.run()