4

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

4

3 回答 3

3

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

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

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

于 2012-07-26T18:47:09.427 回答
2

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

于 2012-07-26T18:39:38.160 回答
1

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

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

https://github.com/timstaley/autocrunch

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

于 2013-05-09T11:31:16.087 回答