如何在不显着影响系统性能的情况下观察文件系统更改?

时间:2011-12-01 21:29:19

标签: python performance python-3.x

我担心另一个新手问题的时间。我正在尝试使用Python 3.2.2(在这种情况下版本很重要)来监视特定的Windows路径以进行更改。最简单的方法和我正在使用的方法是:

original_state = os.listdir(path_string)

while os.listdir(path_string) == original_state:
    time.sleep(1)

change_time = datetime.datetime.now()

我正在编写此代码来对另一个应用程序进行一些时序测试。考虑到这一目标,Python脚本需要(a)不会对系统性能产生负面影响,并且(b)相对精确 - +/- 1秒的误差范围是我能证明的绝对最大值。不幸的是,这种方法不符合第一个标准:当运行这个特定的代码时,虚拟环境被锤击,大大减慢了我试图准确测量其性能的操作。

我已阅读how to watch a File System for changeHow do I watch a file for changes?http://timgolden.me.uk/python/win32_how_do_i/watch_directory_for_changes.html(这篇文章被推荐为第二个SO问题的解决方案。)不幸的是,Tim Golden的代码似乎是Python 2。 x代码 - 尽我所知,Python 3不支持pywin32模块。

在Python 3中,如何在不遇到相同性能问题的情况下监控此特定路径,我该怎么办?

3 个答案:

答案 0 :(得分:2)

根据ActivePython 3.2 Documentation,他们的pywin32现在支持Python 3.x

答案 1 :(得分:1)

答案 2 :(得分:0)

还可以使用GFileMonitor监视文件或目录,Gio负责底层操作系统的详细信息。虽然,如果这是一个Windows程序,你可能不会使用Gtk。后人:

from gi.repository import Gio

gfile = Gio.file_new_for_path('/home/user/Downloads')
gfilemonitor = gfile.monitor(Gio.FileMonitorFlags.NONE, None)
gfilemonitor.connect('changed', callback_func)