Doge log

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

Python

Pythonクイズの答え

http://d.hatena.ne.jp/mopemope/20081016/p1 >>> 3.0/2 1.5 >>> 3.0//2 1.0 切り捨て除算がある言語は珍しいのかな?と思って書いてみました。 id:morchinさん、id:odzさん回答ありがとうございました。 id:morchinさんの回答は強制型変換などさらに詳しく…

自作multiprocessingプログラムサンプル

別に2.6じゃなくても簡単に書こうと思えば書けるよねえ。 でmultiprocessingモジュールの中身はどうなってるのかって話があまり書かれてない感じだったので書いてみた。概略的なコードは以下。 import os import sys import time class Process(object): def…

Pythonクイズ(辞書の非破壊的操作)

Pythonクイズ(辞書の非破壊的操作) >>> d1 = {'a':1, 'b':2, 'c':3} >>> d2 = {'c':4, 'd':5, 'e':6} >>> print dict(d1.items()+d2.items()) {'a': 1, 'c': 4, 'b': 2, 'e': 6, 'd': 5} >>> d1 {'a': 1, 'c': 3, 'b': 2} >>> d2 {'c': 4, 'e': 6, 'd': 5} >…

RemoteManagerの件

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

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…

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…

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のラッパーなので使…

プロセス間ファイル記述子の受け渡し

こんにちわ!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でコンテキストスイッチが発生し、他に…

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があるので割とすぐできそ…

テストとか

pythonだとどうなの? 一番楽なのはdoctestだと思うんだけど。 テストとコードが一体化(つーか仕様書にもなる)してるので コード直す テストのファイル開いて直す とかイチイチしなくていい。 インタプリタでためしたのそのまま張ってもいいし。 でもそん…

PyPy

id:nishiohirokazuも書いてるけど。 # 3.3 Trying out the translator * 3.3.1 Trying out the type annotator * 3.3.2 Translating the flow graph to C code * 3.3.3 Translating the flow graph to LLVM code * 3.3.4 Translating the flow graph to Java…

便所の落書き

これぐらいバカでもできるよ。 grammer.txt IGNORE: " "; NAME: "[a-zA-Z_]*"; NUMBER: "0|[1-9][0-9]*"; arith_expr: term ("+" term)+ | # was (("+"|"-") term)* term ("-" term)+ | <term>; term: factor ("*" term)+ | # was (("*"|"/"|"%"|"//") factor)* fa</term>…

plyでMiniLispを実装

原点に戻る。plyでminilispを実装します。 紹介の意味も込めて某所にあったのをほぼそのまま載せます。 plyのシンプルさ(Lispのシンプルさ?)がわかってもらえるかと思います。 minilisp_lex.py import ply.lex as lex tokens = ('QUOTE', 'SIMB', 'NUM', …

ANTLR

結局、追いかけてるとANTLR方面も見始める事になりそうだ。 ASTも作れる(らしい)のでANTLRの方が楽は楽なんだろうけど。 plyとANTLR(python api)だと全然速度ちゃうんだねー。メモリ消費量はともかく。 あとEBNFみたいな書き方も慣れない。plyはよりpython…

FrontPython

再起動の間にチラ見。 枠だけの提供なのか。サンプルはapp起動してるだけ。 http://code.google.com/p/frontpython/ BRControllerを継承してinit,wasPushedを実装するだけ。 (もちろんサイズなど計算しないといけないけど) なんかtimerとか使って起動をチェ…

PLY

当分、PLYをいじることになりそうだ。 この辺に手を出すとは自分でも思ってなかったな。 PLYといえばid:nishiohirokazuなので今度会ったら教えてもらう。