Doge log

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

2008-01-01から1年間の記事一覧

RemoteManagerの件

http://d.hatena.ne.jp/a2c/20081008/1223403985 multiprocessing部はPEP8になってない部分が多かったり、ドキュメントが適当だったりする。 (python2.6で増えた部分は割りと適当なのかも。kqueueんところも最初すげー適当だったし) bm_server.py from mul…

Netty

http://twistedmatrix.com/pipermail/twisted-python/2005-January/009341.html 意外に古くからあるっぽい。

Spawningの話

一部で話題のSpawning Spawning · PyPI 速いだの遅いだのなんか揉めてたけどどうなったのか。とりあえず中でやってる事のメモ socketをbind,listenまでする(rangeで8回繰り返す意味がよくわからなかった) num_processの指定数分だけプロセスを作りにかか…

ディスクリプタパッシング自分用メモ

python2.6 親はメインのacceptに専念。 子プロセス側でecho処理。 from multiprocessing import _multiprocessing import os import socket import time class FDDispatchServer(object): def __init__(self): self.is_child = None def fork(self): pid = o…

なんとなく

ブロッキングコードのように書けるライブラリと同じようなものをrubyで書いたら.... Ruby1.9以降で greenlet→Fiberで代用。+αが必要 kqueue,epoll→なんかいい定番のラッパーがあればそれを で多分書けそうな気がするんだよなあ。 rubyをはじめる時期なのかも…

socketの置き換え

置き換えをサポートした。 socketモジュールとして動作する。 from mopenio.thread import threaded from mopenio.io import install_nio import socket install_nio() @threaded def handle_client(conn): data = conn.recv(8192) conn.send(data) conn.clo…

python2.6リリースメモ(挫折)

PEP以外の細かいメモ。 schedモジュール scheduleを行うモジュール。 スケジューリングする基準になる時間取得関数などを設定可能。 スケジューリングする際に、時間、優先度、関数、引数を渡す。 内部キューにためる。 runでスケジューラー起動。 キューに…

non blocking I/O ネットワークライブラリ

今作ってるやつ。 python2.6以降前提。 モジュール名募集! ブランド力が大事らしいのでmopenioになりました。 non blocking I/Oだけどブロッキングコードのように書ける。 コアはeventletとほぼ同じになった。。。。 (丸パクリ) from mopenio.thread impo…

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

Pure Python MySQL Driver

GitHub - mopemope/pure-python-mysql: This is PyMySQL original code. Pure python interface to MySQL. ソース見たいひとはどぞ

Pure Python MySQL Driverその後

あとひといき! excutemanyとcallproc以外PEP-249に対応した!(はず) FIELD_TYPEのSETもまだだけど。 nextsetもできた。 249対応できたらどっかに公開する予定。 あとモジュール名募集中です。 なんかいいのないかな?

packet dumpをする

こいつがなければ何も出来ません。 探したけど自分で書くしかないのかなあと。 あんましなさそう(?)なので晒しておく。 def dump_packet(data): def isAscii(data): if data.isalnum(): return data return '.' print "method call: %s \npacket dump" % …

PEP 249対応進まず

PEP 249に対応しようとしてるんだけどなかな難しい。 description。今ぶつかってる問題がここ。 Field Packetでは lengthはバイト数で返ってくる fieldのcharsetは取れるが、何バイトの文字なのかは送られてこない display_sizeが謎 utf8のvar_charだと50ー>…

Pure Python MySQL Driverの事

昔、出すとかなんとかあった気がするんだけど結局のところ出てない。 なので自分で書いてみることにした。 参考になるのは Net::MySQL Ruby/MySQL mysqlのsrc python-mysql protocolバージョンは10。4.0は捨ての方向で。 Net::MySQLがあるので割とすぐできそ…

日記のタイトルを変えてみた

早くも後悔

宣伝しておくか

うちの会社の亀子のぶおこと id:yone098 がいろんなところでキモイことしゃべるらしいです。 エンジニアの未来サミット Seasar Conference 2008 Autumn - Session キッ☆モッ☆イッ! キモイッッッッ! 株式会社Abby ではキモイ人募集しています

さてさて

そろそろ活動再開すっかなあ。 完全にリセットされてる状態なのでネタ募集。

死ぬほど忙しいがこれだけ言っておこう

とりあえず人生の問題のひとつをクリアできそうだ。