DeNA社内の技術共有会でFastAPIの便利さについて語った資料です。 ▼ 要点 ・機械学習の推論API立てる用途ならFastAPIが便利 ・型定義で開発UXばっちり ・ドキュメント自動生成でつなぎこみも円滑 ▼ ソースコード https://github.com/amaotone…
Python 2 EOL Party in Tokyo の発表資料です。 「移行リスクを最小限にする」をテーマに発表しました。 基本的にはコストをかければリスクは減らせますが、Python3 への移行のために多くのコストをかけられるわけではありません。機能のリリースやバグフィックスが優先され、むしろほとんどコストをかけられないのが現実ではないでしょうか。しかし、限られたリソースの中でリスクを可能な限り減らすのがエンジニアの役目です。そのために我々は何ができるでしょうか。 詳細は以下のブログをご参照ください。 https://jumpyoshim.hatenablog.com/entry/how-to-reduce-risk-with-upgrading-to-python3
この記事は、LIFULL Advent Calendar 2017の2日目の記事です。 おはようございます。新UX開発部の二宮( @ninomiyt )です。 LIFULLではデータ解析や最適化の用途、もしくはAWS Lambda上の簡易ツール実装用途などでPythonがそれなりに普及してきました。数値計算寄りの(いわゆるデータサイエンティスト的な)メンバーも今はPythonを使うことが多く、コード量としては小規模なプロジェクトが多く、簡単なAPIやバッチ処理の実装までやってもらうこともあります。 そのレビューをやっていく中で、「これ使うともっと簡単に実装できるよね」っていうライブラリがいくつかまとまってきたので紹介します。 click コマンドラインパーサー用のライブラリで、デコレータを使って関数を簡単にCLI化できます。 標準ライブラリのargparseがありますが、clickではバリ
自分で小さいツールを作る時に心に留めているtipsです. 書き始めたときは「どうせ書捨てだし」と思って書き始めると意外と長い間,もしくはいろんなところで使うことになったりするので,気をつけておくと後から楽になるというような小技です.大規模なソフトウェアの開発ではまた違った流儀があると思います. メインルーチンを関数にする 関数名はなんでもいいのですが,自分は趣味で main() という名前の関数を用意し,メインルーチンは全てそこに書くようにしています. #!/usr/bin/env python def main(): print('hello, hello, hello!') if __name__ == '__main__': main() pythonの小さなサンプルコードを見たりすると関数外の部分にベタで実行コードが書かれていたりします.もちろんそれでも動くのですが,以下の2点で後
Lambda (Python) のローカル環境を整えるため,python-lambda-local を試した.python-lambda-local を使うと,Python コードを Lambda にデプロイすることなく動作確認ができるようになる.Apex を使っていれば apex invoke でお手軽に実行することもできるけど,やはり Lambda に依存せず,単独で実行したいという要件はある.Lambda のローカル環境は誰に聞いても困っている印象がある. github.com 前提 インストールは pip を実行するだけで良い.また,今回紹介するディレクトリ構成は Apex で Lambda をデプロイする前提にしている. $ pip install python-lambda-local BluePrint : hello-world-python まずは AWS に依存せず,P
今回はソケットプログラミングについて。 ソケットというのは Unix 系のシステムでネットワークを扱うとしたら、ほぼ必ずといっていいほど使われているもの。 ホスト間の通信やホスト内での IPC など、ネットワークを抽象化したインターフェースになっている。 そんな幅広く使われているソケットだけど、取り扱うときには色々なアーキテクチャパターンが考えられる。 また、比較的低レイヤーな部分なので、効率的に扱うためにはシステムコールなどの、割りと OS レベルに近い知識も必要になってくる。 ここらへんの話は、体系的に語られているドキュメントが少ないし、あっても鈍器のような本だったりする。 そこで、今回はそれらについてざっくりと見ていくことにした。 尚、今回はプログラミング言語として Python を使うけど、何もこれは特定の言語に限った話ではない。 どんな言語を使うにしても、あるいは表面上は抽象化さ
まえがき 今年の春から今まで、2年ぶりにPythonを沢山書いているわけなんですが、JavaScriptのクソに頭をやられて久しぶり書くだけあって基本的なところから色々と頭から抜け落ちていたわけです。 そんで何か思い出すたびに会社のwikiを使ってメモっていたのですが、せっかくなので少々訂正をしてブログにも書きます。 また、弊社はPython2を使っているので、2が前提の記述になっているところがいくつかあります。なるべくフォローしていますが、参考にする場合は自分が使っているバージョンを確認することをおすすめします。 また、今から新しくPythonでプロジェクトを始めようと思っている人は3系を使いましょう。 知ってる人は当然知ってる、でも結構長いことPythonを書いてても知らなかったりするような小技を載っけました。 なお、メタプログラミングとかの黒魔術っぽい記事のまとめはこちら: hach
_ Rubyが今のPythonの地位にいない理由 歴史のことなんぞなんも知らんけど、「技術的には今のPythonの地位はRubyでもよかったのに、そうならなかった」のが何故か、その理由を書いてみよう。僕はRubyの歴史なんて知らないし、以下の文章は全部、まるで見てきたかのように書いてますが、適当に書いたくせに何故か断言口調になっている怪文書の類いです。 https://twitter.com/mametter/status/741950239662170112 まめさんの書いた理由リストはどれも関係ない。いやカスってるけど。難しいというのも関係ない。 僕がRubyを知ったころ…最初に書いた通りRubyの歴史なんて知らないので、別に早くもないわけだけど…Rubyというのは全く使われていない言語だった。どっかの好き者がPerlの替わりに単純な処理に使って、「ウフ、美しくかけた、グフッ」とかつぶ
私は、多数の大容量のデータをあちこちに移動させなければならない(クライアント端末をHTTP APIに接続してデータを取得します)ような特殊な使用事例を扱っています。なぜだか ^(1) 、転送形式にはJSONが使われていました。ある時、その大容量のデータが、さらに巨大になったのです。数百メガバイトどころではありません。JSONのデコード処理を実行すると大量のRAMが使用されることが分かりました。たった240MBのJSONペイロードで4.4GBですよ。信じられません。 ^(2) 組み込みのJSONライブラリを使っていて、まず「もっと性能の良いJSONパーサがあるはずだ」と思いました。そんなわけで、計測を始めたのです。 さて、メモリ使用量の計測はやっかいです。 ps コマンドを使ったり、 /proc/<pid> を見たりすることはできますが、断片的なスナップショットが得られるだけで、実際の最大使
The following are 30 code examples of redis.ConnectionPool(). You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may also want to check out all available functions/classes of the module redis , or try the search function .
速い Python 実装といえば PyPy が有名ですが、 Python 3 へのキャッチアップが遅い、 CPython が持っている Python/C API のサポートがまだ弱く遅い、などの欠点があります。 また、 Google の1年プロジェクトだった Unladen Swallow もありました。これは CPython をフォークして LLVM で JIT を実装するものでした。この fork 実装は終わりましたが、この時期まだ不安定だったLLVMへの貢献は大きく、(ちゃんとおってないので憶測ですが)現代LLVMを利用したJITを実装しているプロジェクトは全部間接的に Unladen Swallow の成果の上に成り立っていると言えるかもしれません。 終了した JIT プロジェクトといえば、 psyco もありました。これはベタに CPython の JIT を実装していましたが、
ISUCON は Go で参戦しているんだけど、複数のチームが Python で予選通過したらしいので、応援のために Tips を公開していこうと思う。 目次 CPython の GC について 統計情報を出力する 第一世代GCの間隔を調整する Out of Band GC 循環参照を見つけて対処する CPython の GC について CPython のGCは参照カウント+循環参照コレクタだ。そして参照カウント方式は(幾つかの欠点はあるものの)Webアプリのボトルネックになったりはしにくい。 なのでGCチューニングの基本は次のようになる。 循環参照を避ける 循環参照コレクタの呼び出しタイミングを制御する 循環参照コレクタは、生きているオブジェクトの数がある程度増えると第一世代が実行され、第一世代が一定回数実行されると第二世代が、第二世代が一定回数実行されると第三世代が実行される。 各世代
前回の記事に引き続きISUCONのために調べたことをまとめてみます. うちのチームは使用言語にPythonを選択していたので,ISUCON2やISUCON3の予選でも使われていたFlaskというフレームワークを使ったWSGI Application用のプロファイラを探したところWerkzeugのWSGI Application Profilerというものがあったので使ってみました. Flask Flaskは,WerkzeugをベースにしてJinja2をテンプレートに使った軽量なWAFです. Werkzeug WerkzeugはWSGI Applicationのutility libraryで,フレームワークという程ではないですがWSGIの実装を助けるようなrequest/responseオブジェクトの支援ツールやテスター,デバッガなどが含まれています. そしてこのWerkzeugの中にはb
Hacker School在籍中、ネットワーキングの理解をより深めたいと思い、小規模なTCPスタックを書いてみようと思い立ちました。個人的には、C言語よりもPythonの方になじみがありましたし、その頃ちょうど、パケット送信を 非常に簡単に する scapy ネットワーキングライブラリも見つけたところでした。 そんなわけで、 teeceepee を書き始めました。 基本的な構想は次のとおりです。 TCPパケットを送信可能にするRaw socketを開く google.comを取得するためにHTTP要求を送る 応答を取得しパースする 成功を祝う 適切なエラー処理などについてはさほどの注意も払わず、ただただウェブページを取得し、勝利を宣言しようと思っていました(^_^) ステップ1:TCPハンドシェイク 手始めは、GoogleとのTCPハンドシェイクです(以下は必ずしも正しく動作しませんが、原
Flaskでデコレーターを使う方法を調べてみた。 発端 Flaskでデコレーターを使ってみた うまく動いてる パスを増やした あれ?全部のパスで同じ関数呼ばれてない!? もしかしてデコレーター使えないの!? ちょっと検索するとFlaskでデコレーターを使う方法は見つかったんだけど、どういう理屈なのかの説明は見つけられなかったので調べてみた。 こういう物事を説明するのは絶望的に下手なんだけど調べた以上は書き留めたくて。。 でもって間違っているかもしれなくて。 問題と対策 ハマったときのコード from flask import Flask app = Flask(__name__) app.debug = True def sample_decolator(fnc): def decorate(*args, **kwargs): print 'sample_decolator' return
Ruby is a very pragmatic language, and in my experience more consistent as well. These are some examples of how it compares with Python. # rb: fast and convenient; can include libraries from # arbitrary location at the start of a file #!/usr/local/bin/ruby -I/usr/local/sqlite3-ruby/lib require 'sqlite3' # py: must hard-code library paths in the program or use a # wrapper script and append to PYTHO
INDEX コーディングスタイル ファイル操作 日付・時刻 その他 その他 .pycを作りたくない 環境変数PYTHONDONTWRITEBYTECODEを設定すると、.pycおよび.pyoファイルが作成されなくなる。値は何でもいいので、 export PYTHONDONTWRITEBYTECODE=1 などと書いておけばよい。 辞書(dict)のソート キー(key)の順に取り出す >>> score = {'Jack':300, 'Mike':200, 'Jane':100} >>> for (k, v) in sorted(score.items()): ... k, v ... ('Jack', 300) ('Jane', 100) ('Mike', 200) 値(value)の順に取り出す >>> for (k, v) in sorted(score.items(), key=l
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く