gpt4 book ai didi

python - 使用 select/poll/kqueue/kevent 监视目录中的新文件

转载 作者:太空狗 更新时间:2023-10-30 00:42:13 25 4
gpt4 key购买 nike

在我的应用程序中,我需要监视新文件的目录。流量非常大,每秒至少会出现数百个新文件。目前我正在使用这种想法的繁忙循环:

while True:
time.sleep(0.2)
if len(os.listdir('.')) > 0:
# do stuff

运行分析后,我发现很多时间都花在了 sleep 上,我想知道是否应该将其更改为使用轮询。

我正在尝试使用 select 中的可用类之一来轮询我的目录,但我不确定它是否真的有效,或者我只是做错了。

我的目录有一个 fd:

fd = os.open('.', os.O_DIRECT)

然后我尝试了几种方法来查看目录何时更改。例如,我尝试过的其中一件事是:

poll = select.poll()
poll.register(fd, select.POLLIN)

poll.poll() # returns (fd, 1) meaning 'ready to read'

os.read(fd, 4096) # prints largely gibberish but i can see that i'm pulling the files/folders contained in the directory at least

poll.poll() # returns (fd, 1) again

os.read(fd, 4096) # empty string - no more data

为什么 poll() 表现得好像有更多信息需要阅读?我假设它只会在目录中发生更改时才会这样做。

我在这里尝试做的事情是否可行?

如果不是,是否有其他更好的选择来替代 while True: look for changes

最佳答案

FreeBSD 和 Mac OS X 提供了一个名为 kqueue 的 inotify 模拟。在 FreeBSD 机器上输入 man 2 kqueue 以获得更多信息。对于 Freebsd 上的 kqueue,您可以在 http://people.freebsd.org/~dwhite/PyKQueue/ 获得 PyKQueue。 , 不幸的是没有积极维护所以你的里程可能会有所不同。

关于python - 使用 select/poll/kqueue/kevent 监视目录中的新文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1165571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com