Une façon de faire une attente non bloquante est d'utiliser threading.Event:
import threading
dummy_event = threading.Event()
dummy_event.wait(timeout=1)
Cela peut être set()
d'un autre fil pour indiquer que quelque chose est terminé. Mais si vous faites des choses dans un autre thread, vous pouvez éviter le délai d'attente et d'événements tout à fait et juste 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 le contrôle plus fin, je peut vous montrer que ...
L'approche de thread ne fonctionnera pas si votre plate-forme ne fournit pas le module de filetage. Par exemple, si vous essayez de remplacer le module dummy_threading, dummy_event.wait()
renvoie immédiatement. Je ne suis pas sûr de l'approche join()
. Si vous attendez que d'autres processus se terminent, il vaut mieux les gérer à partir de votre propre script en utilisant le module subprocess (puis, par exemple, en utilisant la méthode wait
pour être sûr que le processus est terminé avant de faire la poursuite des travaux).
Si vous ne pouvez pas gérer le sous-processus à partir de votre script, mais que vous connaissez le PID, vous pouvez utiliser la fonction os.waitpid()
. Méfiez-vous des OSError
si le processus a déjà terminé au moment où vous utilisez cette fonction ...
Si vous voulez un moyen multi-plateforme pour regarder un répertoire pour être informé de nouveaux fichiers, je suggère d'utiliser un GIO FileMonitor à partir de PyGTK/PyGObject. Vous pouvez obtenir un moniteur sur un répertoire en utilisant la méthode monitor_directory d'un GIO.File.
exemple de code rapide pour une montre de 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()
Trop pseudo, ne peut pas vraiment aider. Quoi qu'il en soit, pour surveiller un répertoire de nouveaux fichiers, vous pouvez utiliser pyinotify, http://trac.dbzteam.org/pyinotify, 'ReadDirectoryChangesW' dans Windows (par exemple, voir http://tech-artists.org/wiki/Python_Recipes# Watch_a_Directory_for_Changes), etc. –
Il n'y a pas grand chose d'autre à dire. C'est assez basique. Je suis vraiment à la recherche d'un moyen d'attendre la création de fichiers, sans utiliser le processeur (afin qu'ils puissent être créés). – xZel