Doge log

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

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

文字列連結の効率の話

追記: ベンチ追加したふと思ったこと。 ret = ''.join([lst]) が速いというのは正しい。 でもそれはjoin関数が速いという局所的な話。ありがちなコード lst = [] for i in xrange(10000): lst.append("aaa") ret = ''.join(lst) string joinを使いたいがた…

picows その後

segvと戦いつつ、werkzeugのexampleが実行できるレベルまで持っていった。 なのでwsgi対応フレームワークはほぼ動くと思う。実装し忘れてたとこなどがあったり、なんだかんだで当初の予定よりパフォーマンスが出てない。tornadoのサイトに合わせて「ab -c 25…

速いサーバを書いても意味がないという話

全く意味がないというわけではないが。 結局アプリケーションコードが圧倒的にトロいので、サーバ側の処理部がほぼ誤差レベルになる。 レスポンス返すまでの処理時間の9割ぐらいがアプリケーションコードでとられる。 なので次はアプリケーションコードの高…

tornadoの話

話題のtornadoについてちょっと書いておきます。 フレームワークについて tornadoは一応wsgiをサポートしていますが本気で組むなら独自で持ってるAPIの方がよいでしょう。 独自のAPIの方は必要最低限な処理しかしません。 無駄なアプリケーションコードを少…

abのベンチをあげるコード

C

昨日ぐらいからcpu profilerと戦いつつ、うんうん考えてた方法。 思いついた方法と同じような事をnginxもやってて「やっぱそうなるのか」といった感じ。 で頂きました。 ぶっちゃけインチキコードじゃないかなあと思う。とりあえず、時間を引っぱる処理はそ…

picowsのパフォーマンス

とりあえず動かすこと優先で。 メモリリークとかcloseし忘れによるCPU食いつぶしなど直した。 abで-c 100 -n 100000ぐらいで回すとこれぐらい。helllo world ベンチ nginx 3651.08 (#/sec) picows 3394.99 (#/sec) 両方ともCPUは全開で回ってる。 nginxはwor…

シンプルなWSGIサーバ picows

WSGIサーバの勉強がてらシンプルなWSGIサーバを書き始めした。 まだ全然できてませんけど。 特徴 シングルスレッド 非同期 WSGIのみサポート これだけです。シンプルです。 呼び出しもシンプルでひとつのwsgi appしか載せられません。他にもシンプルな理由は…

メモリの開放タイミング

pythonの実メモリがいつ解放されるのか気になったので調べてみた。pythonはメモリを確保する際にドバっと取って使い回すような仕組みを持っている。 (最近の言語はみんなそうかも) この領域をarenaと呼ぶ。余談だけど2.5以前(2.5の初期も入るのかな?)の…

誕生日

とりあえず今日誕生日でした。 誰かなんかください

setの話

checked が配列なので pos in checked が遅い。 勝手に採点 (Re: 自分ならこう書く - pythonでA*) - methaneのブログ あー高速化のためにsetを使うってやったことなかったな。 計測 import timeit a = range(100000) b = set(a) def test(): return 100000 i…

たらららん♪† typeを拡張するコード †たらららん♪

OOな人がpythonにくるといろいろ追加したくなる事があるだろうということで。 ほんのちょっとだけあらびきな方法です。 追加のみのサポート 更新、削除はできない(元を書き換えると副作用で何が起こるかわからないから) 決して更新がめんどくさいからじゃ…

Listの件

見落としてたっぽい。 せっかくなのでトラバしておこう。 http://d.hatena.ne.jp/methane/20090621/1245532793 http://blog.livedoor.jp/dankogai/archives/51226075.htmlまあ拡張できるんだけどね。 listにjoinを追加してみた - def __mopemope__(self, *ar…

builtinの小文字の話

うーん、これは歴史的経緯があってそーなってると思うのでどーしようもないのかな。 pythonのOOは後付けのはずなので昔のものをそのままひきずってるんだと思うなー。 まあ変えちゃうと相当動かなくなるプログラムでてきそうだし、だからといって別名でつけ…

listにjoinを追加してみた

もちろん、ご期待どおりあらびきな方法です。 src 高度に訓練されたpythonistaは継承で拡張なんてしません。 setup.py from distutils.core import setup, Extension module1 = Extension('listjoin', sources = ['listjoin.c']) setup( name='PackageName',…

別名のつけかたあれこれ

こんにちわ、訓練されたpythonistaことmopemopeです。 http://d.hatena.ne.jp/kwatch/20090714/1247572629 を読んで。 んーまあそういう仕組みが全くないというわけではないかなあ。 別名の話をちょっと書いてみたいと思います。 __builtins__について なん…

hgがクソ遅いのでpsycoをかます

僕の記憶では昔、psycoのコードが入ってた気がするんだけど。 しゃあないので自前で。とりあえずRPROMPTに出したいのでbranch,locateが絡みそうなところにかます。 mercurial/commands.py mercurial/dirstate.py mercurial/localrepo.py これでだいぶストレ…

zshのRPROMPTにbranchをだす

hg

hgのコマンドが遅いのでどうしたものかと。 とある条件でのみ出すようにすればいいかなあと思い、開発時には大体virtualenvを使うので active時のみ出すようにしてみた。 _set_env_hg_current_branch(){ HG_CURRENT_BRANCH=$( hg branch 2>/dev/null ) } _up…

Mercurialのhookをplugpyで書く

まだbranchなんだけど思いついたので書いておく。 次で入れるかも。 Mercurialのhook Mercurialのhookはpythonで書くことができる。 設定するには.hgrcに [hooks] #python:. update=python:foo.bar "python:"ではじめて、.と書いておくと呼ばれる。 まあ呼ば…

hgが遅いと感じるzshrc

hg

git使いのひとと同じようにhgでもRPROMPTにbranch名を出してみる (repoの以下のみbranch名を出す) .zshrc _set_env_hg_current_branch(){ HG_CURRENT_BRANCH=$( hg branch 2>/dev/null ) } _update_rprompt(){ if [ "`hg locate 2>/dev/null`" ]; then RPR…

鯖側の非同期の話

モヤモヤ感があるので書いておく。 モヤッとしてるところ 非同期でクエリを投げれても鯖が並列に処理してるとは限らないのでは? mysqlなんかは接続した時にserver thread idなんかを返してきてるので 1接続、1スレッドを割り当ててると思って思ってるんだけ…

plugpyをリリースした

こんにちわ、あらびきプログラマーmopemopeです。 某ライブラリをpythonに移植しようとしてて、plugin周りはなんだかかライブラリ化した方が良さそうだっだので適当に作りました。 plugpy · PyPI 基本実装は以下の奴です。 Pluginシステムの実装 - def __mop…

pypiに間接的にデビューしていた件

pythonでmysqlドライバ書いた奴が他にもいたんだーとRSSをぼーっと見てたら。。。 え? PyMySQL · PyPI なんかメールも来てたのに気づかなかったわー。。。 forkして好きにやってもらっても構わないのになー。

Werkzeugのscreencast

こんにちわ。あらびきプログラマーmopemopeです。 なんか生産性とかうんぬんって話に全く絡めないでいます。 えーっとWerkzeugのscreencastがあるんですが、あまり紹介されてないようなので紹介しておきます。 http://werkzeug.pocoo.org/wiki30/まあpythoni…

cursesでCUIプログラミング

こんにちわ、みちゃこの大ファンなあらびきプログラマーmopemopeです。 最近はbpythonや,urwidなど何気にCUIが流行り始めてるっぽいです。 せっかくなのでtwistedを絡めてみます。 #-*- coding:utf-8 -*- import curses, time, traceback, sys import curses…

あらびきな方法でbuiltinsを拡張する

こんにちわ。あらびきプログラマーことmopemopeです。 builtinsをあらびきな方法で拡張する方法を紹介しておきます 拡張モジュールを作っていじる。 PyThreadState *tstate = PyThreadState_GET(); PyInterpreterState *interp = tstate->interp; // builtin…

Perlのメソッド一覧

スタッシュを教えてもらったので書いてみる。 canで調べてるのと同じ感じに。 static PyObject * perl_get_methodsnames(Perl_Object *self, PyObject *args) { char *module; HV *stash; HE *entry; PyObject *res; if (!PyArg_ParseTuple(args, "s:Perl.ge…

Perl, Python間のやり取り

やはりpyperlと同じになってきた。。。。 python,perlをいろいろ触ってて少しずつ見えてきたのでメモ程度に書いておく。 Perl->Pythonの変換 基本的な型変換はこんな感じ。 SV->PyObjectへ if(SvPOK(sv)){ //string STRLEN len; char *s = SvPV(sv, len); o …

class,module関数

http://d.hatena.ne.jp/naoya/20090506/canonical_huffman_codesを見て。 id:naoyaさんのコードに対するツッコミはid:uemuの仕事だと思ってるけどちょっとだけいじってみた。 メソッドにする必要のないものってモジュールの関数にするんじゃないかなあ。 inn…

perlを呼び出すモジュール

まあpythonからperlを呼び出せた方が何かと便利そうなので勉強がてら書き始めた。 my_perlの洗礼を受けながら適当にevalぐらいは動くとこまではできたかな。 そもそもperlが全然分かってないのでperlのソースも落として必要に応じて見ながら書いてる感じ。mo…

任意のバイトコードの実行

ctypesでのアセンブラは全く相手にされないのでpythonバイトコードを実行する方も書いておく。 pythonバイトコードを実行してみる。 from types import CodeType, FunctionType """ 2 0 LOAD_CONST 1 ('Hello!') 3 PRINT_ITEM 4 PRINT_NEWLINE 5 LOAD_CONST …