2008-09-01から1ヶ月間の記事一覧
multiprocessingといっても今まであったos.forkをうまくラップしてくれてる というだけなのでプロセスをforkしたらどうなるの?っていうのを知らないと 扱えないと思われる。forkすると子プロセスには今までの状態がコピーされるがその後はメモリ空間が 別々…
何秒後に実行する、キューにためこむイメージで後々、まとめて実行するなど スケジューリングして実行するサンプル。方法は2つあってbisectかheapq。 どちらもソート済みにするって点は同じかな。 bisect import bisect import time timers = [] def add_ti…
http://anond.hatelabo.jp/20080322052701 なんだこれ? クラスのhashがNoneなだけでインスタンス化すると正しく__hash__に値が入るよ。 (というかクラスをキーにしたい発想なのかな?)2.5との異なる理由はクラスの扱いがabcの兼ね合いでなんか変ってるせ…
最近、non-bloking I/O+強調スレッド+prefork(multiprocessing)なサーバフレームワーク的なものを 作ろうかと試行錯誤してる。 (aioはその次) でこいつを実現する上で重要なgreenletの解説があんましないので書いてみる。 greenletとは stackless pythonの…
こんにちは!DQNです! python2.6はいろいろ変更点が入って便利になります。 python2.6からはselectモジュールにepoll、kqueueが追加されます。 DQNが思うに変更点の目玉のひとつかだけど余り触れられてないと思うので書いて見る。 ほぼCのラッパーなので使…
なんか色々勘違いしてた Pythonのthreadモジュールはpre-emptive 実際にはGILがあるので100バイトコードごとの協調スレッドのようにふるまう でもPy_BEGIN_ALLOW_THREADS で実行権は譲れる(その間は通常のpre-emptiveなスレッド) I/O待ちの直前でPy_BEGIN_AL…
こんにちわ!DQNです! thundering herd 問題の解決法のひとつ、子プロセスにファイル記述子を送りつけるって奴を実験。 Python C拡張のサンプルにもなってるけどDQNなので難しいことはまったくできませんよ! sendmsg.c #include <Python.h> #include <sys/socket.h> static PyObject *</sys/socket.h></python.h>…
preforkなサーバーを書いてみようと思い、参考にpython2.6から使えmultiprocessing.pyを見てみた。 APIのドキュメントを見るとsendmsgとか使えなさそうな感じ。 なのでmultiprocessing.pyでは親プロセスでacceptしたソケットを子プロセスに転送して処理する…
eventletを少し調べてみた。意外にいい。 twistedよりも軽量(コード量などが) コルーチン生成にgreenletを使用。自前のスタックを使っての継続処理 コルーチンで協調スレッド(co-operate)を実現 socketメソッド、sleepでコンテキストスイッチが発生し、他に…
thread周りもふくむ Pythonのthreadモジュールはpre-emptive clone()がつかえるんならコンテキスト切り替えのコストは大分少ないから速いんじゃない? GILのLock取得とかその辺の排他制御が重い? そもそもGILがあるってことは実質的な動作はco-operativeのよ…
けつのろん、C書けって話ですよね!!
TwistedのMLでなんか出てるけど実際に実装されてないんじゃなかろうか?APIはadbapiのAPIに似たのでいいかなと思ってたらadapiってDBAPI-2.0意識してんのね。 めんどくさ。 (descriptionとfetch系があればいい気がするお) まあpgasyncもDBAPI-2.0を意識してる…
twistedベースのmysql driver twistedベースのジョブサーバ(Gearmanクローンっぽいのとか?) twistedベースのリアルタイムPushサーバ あたり。 やっぱCodeReposあたりがいいのかな。 いまみたらpySchwartzなんてものがあるのでjoinしたほうがええのかもしれな…