刺身の上にたんぽぽ乗せる日記スマートフォン用の表示で見る刺身の上にたんぽぽ乗せる日記プログラミングしたり、自販機の下に落ちてる小銭を集めたりしてますこの広告は、90日以上更新していないブログに表示しています。2chnavi2chnaviのサービスを運用するにあたって、リソースのボトルネックは何かというと、実はCPUが一番きつい。HDDと違って足りなかったら遅くなるだけでよかったんだけど、流石に全てのフィードをとってパースするのに1時間以上かかるのは、1万以上のRSSがあるとはいえ遅すぎる。http://d.hatena.ne.jp/kudzu/20120403/1333449336にも書いたけど、原因はfeedparserの実装が糞遅いから。調べてたらspeedparserというfeedparserとある程度互換があるfeedparserの実装があったので、試してみた。speedparserで入れた。てきとうに2chnaviに登録してあるrssを100ほどdlしてみて、2つのパーサが生成するオブジェクトのフィールドを比べてみたところ、更新日時の解釈が若干違うけど、url、コンテンツ、タイトルなどは割と互換に見える(追記:コンテンツはfeedparserのほうがタグの正規化などを行ってしまうため、完全マッチはできなかった。SANITIZE_HTML=0でも同様)。100くらいしかまだ試してないから、もしかしたらエンコーディングとか色々と細かいところで気が利かないのかもしれんけど。単位はmsecで、左がspeedparser、右がfeedparser。正確な数字をとるために何度も回したりとかはしてないけど、別にそんなことしなくても余裕でわかるくらい差が出てる。speedparserが数十-数百倍くらい速い。feedparserがいかに遅いかよくわかると思う。testcase追加してunittest全部通したらdeployしてみようかと思う。追記:一時間以上かかってたクロールが3分もかからなくなった。その3分の大部分がいくつか返事が返ってこないフィードの待ち時間で、過半数はあっという間に終わってた。右端のところが新しいparserを使ったところで、見ての通り、ピークが100%にいかなくなってる。互換性の問題で移植できなかった部分はfeedparserのままにしておいたせいで多分まだ高めになってる。その処理自体はioのほうがボトルネックになるから、気にしなくていいかな、と思って放置してる。追記2:べ、別に都合のいい部分だけ切り抜いたわけじゃないんだからね、ということでピークがすぎる部分も載せてみる。ピークが小さくなった上に、圧倒的に短くなってるのがよくわかると思う。virtualenv設定メモサーバがまた起動しなくなってた月別アーカイブはてなブログをはじめよう!kudzuさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。