出现在目录中的文件比我处理它们的速度更快(pyinotify)

Posted

技术标签:

【中文标题】出现在目录中的文件比我处理它们的速度更快(pyinotify)【英文标题】:Files appearing in directory faster than I can process them (pyinotify) 【发布时间】:2012-07-26 18:36:20 【问题描述】:

我正在使用 pyinotify(process_IN_MOVED 事件)来监视目录中出现的文件。当出现新文件时,会触发该事件,对文件进行某种处理。问题是有时文件出现在目录中的速度比我处理它们的速度要快,这意味着一堆文件不会得到处理。我可以只拥有一个睡眠十秒钟然后醒来寻找新文件或其他东西的功能,但如果可能的话,我真的想坚持基于事件的解决方案。有没有办法做到这一点?

【问题讨论】:

【参考方案1】:

一般来说,我会在这里实现一个线程池来处理处理,而事件观察者只会观察事件并将它们传递给池。 粗略的例子:

(event happens) -> 
Watcher registers the event -> 
puts it into the thread pool queue -> 
thread pool processes the event

这样观察者将在等待部分之外花费最少的时间,从而大大减少错过更新的机会。

【讨论】:

【参考方案2】:

Twisted 拥有inotify support。你可以给它一个回调来做你的处理。你绝对不想成为sleeping。这取决于您要在进程内还是通过另一个进程执行的处理类型,但您不应该丢失事件。

【讨论】:

【参考方案3】:

正如 Humungus 所说,线程池是一个不错的选择。

我刚刚发布了一些我为这个问题编写的代码,地址:

https://github.com/timstaley/autocrunch

应用程序特定的细节有点混乱,但您应该能够根据自己的需要添加替换功能。 我可能会在某个时候写一篇带有精简版的博客文章,但现在没有时间。 HTH!

【讨论】:

以上是关于出现在目录中的文件比我处理它们的速度更快(pyinotify)的主要内容,如果未能解决你的问题,请参考以下文章

如何在条件满足之前用 N 行中的一些对条件行进行子集化,比我的代码更快?

为啥我的 O(NLogN) 算法查找字谜比我的 O(N) 算法运行得更快?

音频处理库性能对比:计算mel频谱的速度哪个更快?

头文件的编译速度更快?

网站和 PHP:执行速度更快。从几个目录与许多目录加载文件? [复制]

如果我收到UDP数据的速度比我的程序可以处理的速度快,那么我的失败点是什么?