Doge log

Abby CTO 雑賀 力王のオフィシャルサイトです

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

違いは

  1. 各フラグの頭にKQ_がくっつく
  2. EV_SETマクロ = kevent
  3. kevent関数 = control

ぐらいです。

この例ではtest.txtの削除を監視します。
test.txtが削除されたら、メッセージ出力して抜けます。

ちなみにpythonのドキュメントでkeventもkqueueになってるけど間違いだと思う。
DQNが書いた)
もちろんpython3kでも使えますよ。
これでラッパーともおさらば!
追記
なんか間違ってたっぽいのでソース修正