一种方法是使用threading.Event:
import threading
dummy_event = threading.Event()
dummy_event.wait(timeout=1)
这一点可以从另一个线程set()
表明某件事已经完成。 但如果你是在另一个线程做的东西,你能避免超时和事件完全和公正join
其他线程:
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
如果你想使用事件更细粒度的控制的一个例子,我可以告诉你......
如果你的平台没有提供线程模块,线程方法将不起作用。例如,如果您尝试替换dummy_threading模块,则立即返回dummy_event.wait()
。不确定关于join()
的方法。
如果您正在等待其他进程完成,那么最好使用subprocess模块从您自己的脚本管理它们(然后,例如使用wait
方法确保在执行之前完成该过程进一步的工作)。
如果您不能从脚本管理子流程,但知道PID,则可以使用os.waitpid()
函数。如果在使用此功能时已经完成处理,请注意OSError
...
如果您希望以跨平台的方式观看要通知新文件的目录,我建议您使用GIO FileMonitor从PyGTK/PyGObject。您可以使用GIO.File的monitor_directory方法在目录上获得监视器。对于目录表
快速示例代码:
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()
太假,无法真正帮助。无论如何,要监视新文件的目录,您可以在Windows中使用pyinotify,http://trac.dbzteam.org/pyinotify,“ReadDirectoryChangesW”(例如,请参阅http://tech-artists.org/wiki/Python_Recipes# Watch_a_Directory_for_Changes)等等。 – 2010-08-05 15:22:28
没有什么可说的。它非常基本。我真的只是在寻找一种方法来等待文件被创建,而无需使用cpu(因此可以创建它们)。 – xZel 2010-08-05 17:53:22