python2.6からはepoll、kqueueが使える
こんにちは!DQNです!
python2.6はいろいろ変更点が入って便利になります。
python2.6からはselectモジュールにepoll、kqueueが追加されます。
DQNが思うに変更点の目玉のひとつかだけど余り触れられてないと思うので書いて見る。
ほぼCのラッパーなので使い方もほぼ同じです。
Macなのでkqueueのサンプルです
from select import * kq = kqueue() file = open('test.txt', 'r') ke = kevent(file.fileno(), KQ_FILTER_VNODE,\ KQ_EV_ADD|KQ_EV_ENABLE|KQ_EV_ONESHOT,\ KQ_NOTE_WRITE|KQ_NOTE_DELETE, 0, 0) active = True while active: events = kq.control([ke], 1) for k in events: if k.fflags & KQ_NOTE_DELETE: print("File deleted\n") active = False
違いは
- 各フラグの頭にKQ_がくっつく
- EV_SETマクロ = kevent
- kevent関数 = control
ぐらいです。
この例ではtest.txtの削除を監視します。
test.txtが削除されたら、メッセージ出力して抜けます。
ちなみにpythonのドキュメントでkeventもkqueueになってるけど間違いだと思う。
(DQNが書いた)
もちろんpython3kでも使えますよ。
これでラッパーともおさらば!
追記:
なんか間違ってたっぽいのでソース修正