Doge log

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

2008-09-01から1ヶ月間の記事一覧

multiprocessing入門

multiprocessingといっても今まであったos.forkをうまくラップしてくれてる というだけなのでプロセスをforkしたらどうなるの?っていうのを知らないと 扱えないと思われる。forkすると子プロセスには今までの状態がコピーされるがその後はメモリ空間が 別々…

スケジューリング

何秒後に実行する、キューにためこむイメージで後々、まとめて実行するなど スケジューリングして実行するサンプル。方法は2つあってbisectかheapq。 どちらもソート済みにするって点は同じかな。 bisect import bisect import time timers = [] def add_ti…

[Python]Python 2.6だとのクラスの__hash__

http://anond.hatelabo.jp/20080322052701 なんだこれ? クラスのhashがNoneなだけでインスタンス化すると正しく__hash__に値が入るよ。 (というかクラスをキーにしたい発想なのかな?)2.5との異なる理由はクラスの扱いがabcの兼ね合いでなんか変ってるせ…

greenletのススメ

最近、non-bloking I/O+強調スレッド+prefork(multiprocessing)なサーバフレームワーク的なものを 作ろうかと試行錯誤してる。 (aioはその次) でこいつを実現する上で重要なgreenletの解説があんましないので書いてみる。 greenletとは stackless pythonの…

python2.6からはepoll、kqueueが使える

こんにちは!DQNです! python2.6はいろいろ変更点が入って便利になります。 python2.6からはselectモジュールにepoll、kqueueが追加されます。 DQNが思うに変更点の目玉のひとつかだけど余り触れられてないと思うので書いて見る。 ほぼCのラッパーなので使…

[Python]Pythonサーバーメモその2

なんか色々勘違いしてた 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>…

multiprocessing.pyはファイル記述子を交換できそう

preforkなサーバーを書いてみようと思い、参考にpython2.6から使えmultiprocessing.pyを見てみた。 APIのドキュメントを見るとsendmsgとか使えなさそうな感じ。 なのでmultiprocessing.pyでは親プロセスでacceptしたソケットを子プロセスに転送して処理する…

eventlet

eventletを少し調べてみた。意外にいい。 twistedよりも軽量(コード量などが) コルーチン生成にgreenletを使用。自前のスタックを使っての継続処理 コルーチンで協調スレッド(co-operate)を実現 socketメソッド、sleepでコンテキストスイッチが発生し、他に…

[Python]Pythonサーバーメモ

thread周りもふくむ Pythonのthreadモジュールはpre-emptive clone()がつかえるんならコンテキスト切り替えのコストは大分少ないから速いんじゃない? GILのLock取得とかその辺の排他制御が重い? そもそもGILがあるってことは実質的な動作はco-operativeのよ…

結論

けつのろん、C書けって話ですよね!!

Async MySQL Driver

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したほうがええのかもしれな…