アルパカログ

プログラミングとエンジニアリングマネジメントがメインです。時々エモいのも書きます。

Python

Gunicornで先に重い読み込みを済ませておくpreload_appオプション

PythonのWebサーバーGunicornにはワーカーのためにプロセスをフォークする前に、重いファイルをプリロードしておけるオプションがあります。 例えば機械学習のモデルや辞書といったような重いファイルをロードして使うようなアプリケーションでは、ワーカー…

【Python3】範囲を限定してインスタンス/クラスメソッドをmockする

Pythonのテストでメソッドをmockするとき、インスタンスメソッドはよくMagicMockを使ってmockしますが、クラスメソッドの場合はmockするとテストケースが終わっても影響が残り続けてしまいます。 これはクラスとインスタンスのライフサイクルの違いによるも…

【Python】リストをN分割する

[arr[i::n] for i in range(n)] arr: 分割したいリスト(配列) n: 分割数 >>> arr = [1, 2, 3, 4, 5, 6, 7] >>> n = 3 >>> divided_arr = [arr[i::n] for i in range(n)] >>> divided_arr [[1, 4, 7], [2, 5], [3, 6]]

Slack Botで学ぶPython

Slack Botはプログラミングを学ぶ上でちょうどいい題材です。 例えば、英語のために英語を学ぶのは退屈ですが、海外旅行などで実際に英語を話す体験があるとやる気が出ますよね。 プログラミングも同じように、書いたプログラムが自分の生活をちょっと便利に…

【Python】MFAアカウントでBoto3からAWS SDKを使う

AWS SDK for Python (Boto3) をMFA を設定したアカウントで下記のように普通に使おうとするとエラーになってしまいます。 import boto3 client = boto3.client('sagemaker-runtime') MFA を設定しているアカウントでは、下記のように STS クライアントを使っ…

【Python3】パイプありのシェルコマンドを実行する

Python からシェルコマンドを実行するには subprocess モジュールを使うのが定石かと思います。 パイプありのシェルコマンドの実行方法を調べると、たいてい shell=True として 'command1 | command2' のような文字列を渡す例がよく出てきます。 しかし、こ…

【Python3】キーワード引数の強制とデフォルト値の省略(keyword-only argument)

Python3 でデフォルト値のないキーワード引数を最近知ったので少し調べた内容をまとめておきます。

Pythonのデコレータとは?使い方からテストの書き方まで解説

最近仕事で Python のデコレータをレビューしてもらう機会があり「デコレータなんぞや?」となっていたのを見かけたので、備忘録を兼ねて書き残しておきたいと思います。