methaneのブログ

このブログに乗せているサンプルコードはすべてNYSLです。

python

Heroku 上での Python 3 率

requestsなどの作者として有名な、HerokuのKenneth Reitzさんが、とてもうれしいグラフを公開してくれていたのでシェアさせていただきます。 % of Heroku builds using Python 3: (it's the blue) pic.twitter.com/clUiZd0b01— Kenneth Reitz (@kennethreit…

Windows では2020年を待たずに Python 2.7 が使い物にならなくなっていく

昨日 mysqlclient 1.3.10 をリリースしました。 今までは Windows 版の wheel は Python 2.7 だけに提供していたのですが、 1.3.10 からは 3.5 と 3.6 だけに提供して 2.7 はドロップしました。 そもそも今まで Python 3 に wheel を提供できてなかったのは…

pip 9.1 から msgpack が使われるようです

Adopt cachecontrol 0.12.0 with msgpack support というコミットがありました。 どうやら CacheControl というのが pip が使っている requests 用のキャッシュライブラリで、その最新版が msgpack を使っているようです。 前のバージョンはバイナリデータを…

CPython の Core Developer になりました

Python 3.6 に取り込まれた dict の新実装などでコアコミッターに興味を持ってもらい、 Core Developer (要するにコミッター) に推薦しようか?という提案をもらいました。 最初はコミッターとか面倒そうだし、コミットメッセージとかNEWSエントリー(通常パ…

Python 3.6 の(個人的に)注目の変更点

Python 3.6b1 がリリースされましたね。(フライング) beta1 ということで、 3.6 に向けた新機能の追加は (provisional package を除いて) 終了です。ただし、仕様が確定したと言うわけではなくて、beta版に対するフィードバックを元に新機能を修正したり、…

Python 3.6 に向けて新しい dict 実装の人柱募集

会社のBlogに書いた通り、現在新しい dict の実装を試しています。 また、 shared key を削除して実装を削れた分、別の効率のいい特殊化 dict を実装して、 compact + shared よりも高い効率を狙うこともできます。 今はあるアイデアのPOCを実装中なので、採…

manylinux1 wheel を作ってみる

先日の記事 で紹介した、 manylinux1 wheel を作ってみます。 manylinux1 docker image ビルド環境を Docker image として公開してくれています。 Github manylinux Docker (amd64) Docker (x86) docker pull quay.io/pypa/manylinux1_x86_64; docker pull q…

Wheel が Linux でもバイナリパッケージに対応しました

PEP 0513 -- A Platform Tag for Portable Linux Built Distributions | Python.org 今まで Windows と Mac では、ビルド済みのバイナリ形式の拡張モジュールを wheel にして配布することができました。 WindowsやMacに比べてLinuxは環境の差が激しいのでバ…

GAE が Python 3 に対応しました

今日、 GAE が Ruby と node.js をサポートするという発表がありましたが、実際のところ、今まであった Managed VM が GAE flexible environment と名前を変えたようです。 そして GAE flexible environment の公式イメージとして、 Ruby, node.js などに加…

最近出たPython本2冊紹介

1冊めは入門書。結城さんの Tweet を見て知った。 www.amazon.co.jp プログラミング自体が初めてという人向けの入門書なので真面目に読む気は無いんだけど、応援のために買ってみた。 中身をかいつまんで読んでみたんだけど、例えばよくある間違いのコードを…

miniconda3 が遅かった件

このブログで何度か紹介している TechEmpower FrameworkBenchmarks では、フレームワークごとにテストを Travis で回している。 Python をビルドするときには速度重視で make profile-opt でビルドしたいのだが、ビルド時間が長くなり、 Python 2 と 3 の両…

判りやすいやり方が1つは必要だ -- その1つだけなら最高だね

はじめてのにき(2016-03-10) を見て。 Python の Zen の一つ "There should be one - and preferably only one - obvious way to do it." はよく誤解される。 これはもちろん Perl の TMTOWTDI 「やり方は1つじゃない」に対するものなのだけど、反対の「やり…

Python をビルドするときに LTO (Link Time Optimization) を使う

タイムラインで Ruby が LTO で速くなるという話題を目にしたので、 Python でどう使うんだったっけ?と思って調べてみました。 ちょうど configure オプションに --with-lto を付けるパッチが投稿されていました。 Issue 25702: Link Time Optimizations su…

prompt_toolkit がアツい

とりあえず mycli と aws-shell のスクリーンキャストを見てください。 prompt_toolkit はこのようなリッチコンソールアプリを作るためのライブラリです。 Windows でも動きます。 Jupyter (ipython notebook) を切り離した、コンソール版の ipython も次の…

Python を速くする取り組み

速い Python 実装といえば PyPy が有名ですが、 Python 3 へのキャッチアップが遅い、 CPython が持っている Python/C API のサポートがまだ弱く遅い、などの欠点があります。 また、 Google の1年プロジェクトだった Unladen Swallow もありました。これは …

CPython の GC チューニング

ISUCON は Go で参戦しているんだけど、複数のチームが Python で予選通過したらしいので、応援のために Tips を公開していこうと思う。 目次 CPython の GC について 統計情報を出力する 第一世代GCの間隔を調整する Out of Band GC 循環参照を見つけて対処…

Python の新しいプロファイラ vmprof が面白い

PyPy 2.6 と同時に、 vmprof という CPython/PyPy 用のプロファイラが登場しました。 私はまだ PyPy では使っていませんが、CPythonのプロジェクトをこれでプロファイル取ってみたらなかなか面白かったので紹介します。 概要 Python にはもともと標準ライブ…

PyMySQLのメンテナにSQLAlchmey開発者のMike Bayer (@zzzeek)さんが参加しました

このブログでも数回紹介していたとおり、今メジャーな Python の MySQL ドライバ3つのうち2つ (MySQL-python の fork の mysqlclient と PyMySQL) を僕がほぼ単独でメンテナンスしている状況でした。 メンテナンスしているといっても、両方とも MySQL-python…

json.dump() は ensure_ascii=False の方が遅かった

Python の標準ライブラリの json モジュールのエンコード機能には ensure_ascii というオプションがあり、デフォルトでは True です。このオプションが真のときは、非ASCII文字を全て "\uXXXX" の形にエスケープします。 ensure_ascii=True の方が安全ですが…

Python 3.3 以上で使える Python/C API で文字列アクセスを高速化

試しに英語で Blog を書いてみた のですが、書くので精一杯で結局何が言いたいのか分からない感じになってしまったので今後は日本語 Blog 書いてから英訳しようと思います。 Python 3 は 3.2 まで、文字列を unicode に統一した関係で Python 2.7 に比べて遅…

http-parser と picohttpparser との比較

h2o Advent Calendar 2014 の記事です。 Minefield は http-parser (nginx のパーサーと基本的に同じもの) を利用しているのですが、これを picohttpparser に置き換えてみます。 最初は libh2o に置き換えるつもりだったのですが、まだ API が unstable で…

Unix Domain Socket において keep-alive が性能に与える影響 (Gazelle vs Meinheld)

id:kazeburo さんが Gazelle という高速な Perl 用の Web アプリケーションサーバーを公開されました。 Gazelle - Plack Handler for performance freaks #yokohamapm from Masahiro Nagano Gazelle の特徴のうち幾つかは、 id:mopemope 作の Meinheld と同…

mysqlclient が Django の推奨ドライバになりました

MySQL-Python (MySQLdb) のメンテナンスが停滞したことで fork して後方互換性を保ったままメンテナンスをしている mysqlclient ですが、 Django の recommend になりました。 Databases | Django documentation | Django もともと推奨になっていた MySQLdb …

Web アプリケーションにおいては Python 3 への移行は簡単だという話

Python 2 / 3 両対応のライブラリをメンテナンスしている人にとって、 Python 3 の メリットは享受できずメンテナンスコストだけが上がるつらい状況がずっと続いています。 しかし、「Python 3 への移行が大変」というのは、Python 2 を捨てるのが大変、 Pyt…

PyCon JP 2014 の1日目 keynote について

今年は娘ができたこともあり、 PyCon JP に発表だけじゃなく参加もしませんでした。 (娘と妻次第ですが、来年からはまた行きたいと思っています。) さて、 Twitter を眺めていると Python 3 に対するネガティブな反応がいきなり 流れ始めました。元になった…

Tornado-MySQL をリリースしました

PyMySQL をベースに Tornado をサポートした Tornado-MySQL をリリースしました。 Github: https://github.com/PyMySQL/Tornado-MySQL PyPI: Tornado-MySQL 0.2 : Python Package Index 単に IO 部分を Tornado に置き換えるだけでなく、簡単なコネクション…

mysqlclient-python を簡易的に非同期I/Oに対応させた

libmysqlclient を利用した Python の MySQL ドライバである libmysqlclient-python を、 gevent, meinheld など非同期I/O + 軽量スレッド環境で使いやすいようにしました。 libmysqlclient の API について libmysqlclient は基本的に同期IOのことしか考え…

mysqlclient をリリースしました

前回の記事で しかし、長年の実績がある本家といえども、個人プロジェクトで、1年に数回しかコミットされてない現状です。 一応、「いま転職直後で時間ないんだけど、できれば週末に見ておくよ」という感じのレスを貰ったのでしばらく待ってみますが、進展…

MySQL-python の Python 3 対応

去年10月に Python 3 の MySQL ドライバ事情 という記事で次のように書いていました。 多分デファクトスタンダードな MySQLドライバなのですが、現状リリースされている 1.2.4 では Python 3 対応ができていません。 Fork の MySQL-for-Python3 が推奨されま…

Python 2/3 両対応のために `unicode_literals` を使うべきか

背景 Python 2 用のコードを書くときは、 Python 3 対応を見越して # -*- coding: utf-8 -*- from __future__ import division, print_function, absolute_import をテンプレとして書いています。 __future__ はファイルごとにバラバラだと混乱を招くので、…