https://gyazo.com/d2e4c3c3354e5ee7ff62c27d83fed712.png

ファイルやディレクトリを監視してタスクを実行する

ファイルが更新されたタイミングや、ディレクトリにファイルが新規に保存されたタイミングで何かタスクを実行させたいときがあります。最近のOSではシステムレベルでのサポートもあります。

これらのインタフェースをラップするライブラリも多く公開されています。

pyinotify

パッケージ名からわかるようにLinux の inotify のインタフェースを利用しています。 Linux 以外のプラットフォームでは利用できないことに注意してください。

この資料を作成している時点で、pypi.org では次のパッケージが公開されています。

rs-pyinotify は、docstrings が変わっているだけで機能は pyinotify と同じものです。

 import pyinotify
 import asyncio

 def handle_read_callback(notifier):
     """
     Just stop receiving IO read events after the first
     iteration (unrealistic example).
     """
     print('handle_read callback')
     notifier.loop.stop()

 wm = pyinotify.WatchManager()
 loop = asyncio.get_event_loop()
 notifier = pyinotify.AsyncioNotifier(wm, loop,
                                      callback=handle_read_callback)
 wm.add_watch('/tmp', pyinotify.ALL_EVENTS)
 loop.run_forever()
 notifier.stop()