Doge log

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

最近のeventlet

http://sklave.jp/logs/2010/1/17/eventlet%E3%81%A7comet%E3%82%B5%E3%83%BC%E3%83%90を見て気になったのでわかる範囲で。
僕がeventletを見てたころより実はいろいろ変わってたりするわけだけど。

event(pyevent)はだめくさい

僕の環境だとimport eventが通るので問題なくeventlet.hubs.libevent.Hubが使われてる。
そもそもimport eventが通ってない可能性がある。
hubの実装は実はそんなに大変じゃあないんだけどめんどい場合は
twistedのreactorを使わせる方法でもいいかな。
twistedのreactorを使うにはeventよりも先にreactorをimportする必要がある。
あとreactor.runは自前で叩かないとダメ。(だったはず)

追記
lindenのリポジトリはevent(pyevent)廃止らしい。
epollが優先で使われるようだ。
(これ実装ちゃんとしてないんじゃない?)
kqueueは残念ながらない。
eventを使いたい人はdonovanのリポジトリ版を使用するといい。

自前実装の参考資料
mopemope / nsocket — Bitbucket
書きかけだけど。
名前が違うけどやってることはほぼ同じ。

WaitForMultipleObjectsがやりたい

これは条件次第なんだけど

  1. 辞書に放り込んで、キーで引いて対象のデータのみ引っ張る
  2. リストに突っ込んで、bisectなどで対象を引っ張る

などの方法がある。

前者はpython-actorsが行ってる方法。
fzzzy / python-actors — Bitbucket

後者はeventletのhubでtimer処理を使用しているところで行っている方法。
(twisted風にやるとすればheapqで)

その他

場合によってはgeventを使用するって方法もある。
(geventはeventletを元に作られてる。libeventのhubは自前実装のはず)
denis / gevent — Bitbucket

eventletはDonvanがいじってるのが最新のはずなので
http://bitbucket.org/which_linden/eventlet/
あるいはDonovan本人のところ
http://bitbucket.org/fzzzy/eventlet/
をみるといい。