タグ

ブックマーク / methane.hatenablog.jp (7)

  • AutobahnPython と WebSocket4Python の高速化 - methaneのブログ

    Python の WebSocket ライブラリの Autobahn と ws4py は、テキストフレームを受信した時にその内容が正しい UTF-8 になっているかどうかをバリデートしています。 このバリデートが1バイトずつの処理を Python でやっているために、 PyPy を使ってない場合は結構重くて、メッセージ量が大きい時に簡単にボトルネックになってしまいます。 そこでこのバリデートを Cython でやる wsaccel を作りました。 pip install wsaccel でインストールできます。 ws4py を使う場合は import wsaccel; wsaccel.patch_ws4py() で ws4py の中の Utf8Validator を Cython 版に置き換えます。 WebSocket の典型的な利用方法だとJSONを転送したりすると思うのですが、このパッ

    AutobahnPython と WebSocket4Python の高速化 - methaneのブログ
  • Python の新しいプロファイラ vmprof が面白い - methaneのブログ

    PyPy 2.6 と同時に、 vmprof という CPython/PyPy 用のプロファイラが登場しました。 私はまだ PyPy では使っていませんが、CPythonプロジェクトをこれでプロファイル取ってみたらなかなか面白かったので紹介します。 概要 Python にはもともと標準ライブラリとしてプロファイラ (cProfile) が付いてきていますが、これは関数の呼び出しと戻りでコールバック関数を呼び出しつつ実行時間を計測するタイプのプロファイラで、短時間でも正確なプロファイルが取れる反面、オーバーヘッドが大きく、小さい関数をたくさん呼び出す部分がオーバーヘッドでより大きく見えてしまうなどの問題がありました。 これと別の種類のプロファイラとして、定期的にサンプリングして、サンプルが多いところが実行時間も多いハズ、というプロファイラもあります。こちらはある程度の量のサンプルを集めないと

    Python の新しいプロファイラ vmprof が面白い - methaneのブログ
  • Unix Domain Socket において keep-alive が性能に与える影響 (Gazelle vs Meinheld) - methaneのブログ

    id:kazeburo さんが Gazelle という高速な Perl 用の Web アプリケーションサーバーを公開されました。 Gazelle - Plack Handler for performance freaks #yokohamapm from Masahiro Nagano Gazelle の特徴のうち幾つかは、 id:mopemope 作の Meinheld と同じです。 IO周りは全てCで書かれている accept4 や writev などの Linux 独自のシステムコールを利用している 一方で異なる点もあります。 Meinheld は HTTP/1.1 に対応していて、 keep-alive が利用できる。 Meinheld は greenlet というコルーチンを利用して、 long polling や SSE に対応している。 Meinheld が http-pa

    Unix Domain Socket において keep-alive が性能に与える影響 (Gazelle vs Meinheld) - methaneのブログ
  • Python でシェル経由でコマンド実行するときのバッドノウハウ - methaneのブログ

    PHPだってシェル経由でないコマンド呼び出し機能が欲しい コマンド実行でシェルが怖いなら使わなければいいじゃない どちらの記事でも Python の subprocess を使ってシェルを介在せずにコマンドを実行する方法が紹介されています。 シェルを介在すると、エスケープの問題考えるのが面倒だったり、 kill してみたらシェルだけ殺して肝心のコマンドがずっと残ってるというアホみたいな問題を避けられるのでお勧めです。 いい子はこれを使いましょう。 この記事ではどうしてもシェルの機能が使いたい場合や、 subprocess の PIPE の組み立てが面倒な場合のための、バッドノウハウを紹介していきます。 ちなみに、バッドノウハウと呼んでるのは、安全安心 one size fits all ではなく、メリット・デメリット・やり方をいちいち調べないといけなくて、しかもその調べる行為がほとんどコン

    Python でシェル経由でコマンド実行するときのバッドノウハウ - methaneのブログ
  • Mac で Python の開発環境構築(2013.11) - methaneのブログ

    しばらく Mac からおさらばしていたのですが、ゆえあって戻ってきました。 Python 3.3 ベースで Python 環境の構築をしたので、参考までに手順を残しておきます。 1. Homebrew で Python 3 をインストール とりあえずベースになる Python を用意します。いまならもう Python 3 を普段使い用にできるので、 Python 3 を用意します。 $ brew install python3 MacPorts でも大丈夫だと思います。 2. 自分用のデフォルト環境を作る システムの Python に直接自分が普段使うツール類をインストールするのは憚られるので、自分用のデフォルト Python を用意します。 Python 3.3 では venv が標準ライブラリにあるので、この手順で virtualenv を手動で準備する必要がなくなりました。 $ mk

    Mac で Python の開発環境構築(2013.11) - methaneのブログ
  • Chef-solo の代わりに fabric を使う - methaneのブログ

    Fabric は ssh 経由でリモートをゴニョゴニョするツールなので、デプロイツールとして見られがちですが、 cuisine など冪等な操作をサポートするライブラリを組み合わせれば手軽な構成管理ツールになります。 chef-solo に比べてターゲットとなるマシンへのインストールが不要なので vagrant と EC2 の Amazon AMI で同じように home ディレクトリを構築するようなスクリプトを書くことも可能です。 また fabtools を使えば、簡単に vagrant を対象にすることができます。 インストール: $ pip install fabric fabtool cuisine fabfile.py を作ります (サンプル): 使い方: $ fab vagrant package_upgrade setup_devtools # 開発マシンにいつもインストールし

    Chef-solo の代わりに fabric を使う - methaneのブログ
  • tracebackをログに残す場合のお約束コード - methaneのブログ

    import traceback try: ... except: log.error(traceback.format_exc()) raise 例外は、こまめにチェックするよりも、あえてチェックしない方が良いことがある。 とくに、例外をcatchしておいて、結局自作の情報量が少ない例外を再送出するのは最悪。 エラーが起きたらログだけ取って、例外自体はそのまま上に流したい場合は、exceptブロックの中でraiseする。Webアプリにありがちなシチュエーション。 traceback.format_exc()は超便利だけどすぐ忘れるのでここにメモしとく。

    tracebackをログに残す場合のお約束コード - methaneのブログ
  • 1