みーのぺーじ

みーが趣味でやっているPCやソフトウェアについて.Python, Javascript, Processing, Unityなど.

Python

Pythonプロセスのメモリ使用量を取得する

以下の関数でメモリ使用量(RSS)が取得できます. import platform import resource def get_maxrss() -> float: system = platform.system() r = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss if system == "Darwin": return r / 1024 / 1024 # byte…

(mypy)Relative import climbs too many namespaces

mypyが”Relative import climbs too many namespaces"とエラーして,気づくのに時間がかかったのでメモしておきます. プロジェクトは以下のような構成です. src └──b.py a.py b.pyの中身は以下の通りです. from ..a import foo foo() 原因は単純で,src/…

Pythonのリスト内包表記内で同じ名前の変数を使う

以下のようなPythonスクリプトを見かけました. a = [1, 2, 3, 4, 5] a = [a*2 for a in a] print(a) 最初に宣言した変数aと同じ名前の変数aをリスト内包表記内で使用しています. 初めて見た時は意味がわからなかったのですが,問題なく動作します. [2, 4,…

Djangoの開発サーバーではデータベース接続を維持してはいけない

Djangoのrunserverコマンドを使用して開発している時に,たくさんのリクエストを行うとデータベース接続数が次第に増えていき, FATAL: sorry, too many clients already` というエラーが発生する現象に遭遇した時のまとめです. 環境 Django 3.1.6 'CONN_MA…

Pythonのloggingでデバッグ

Pythonのloggingはとても便利です. logging --- Python 用ロギング機能 — Python 3.9.1 ドキュメント logging.debug(msg, *args, **kwargs)関数には便利なキーワード引数が存在します. stack_info logging.info("test", stack_info=True) これだけで,スタ…

Pythonのグローバル変数のメモ

以下の記事がとても有用だったのでメモします. Why am I getting an UnboundLocalError when the variable has a value? - Programming FAQ - Python 3 以下のスクリプトは実行されます. x = 10 def bar(): print(x) bar() 10 x=1を追加すると,UnboundLoc…

Djangoで作成したDockerイメージをVS Codeでデバッグする

VS CodeのPython拡張機能を使うことで,Pythonスクリプトを簡単にデバッグすることができます.これをDockerで実行中のDjangoプロジェクトで使用できるようにします. Python - Visual Studio Marketplace debugpyとVS Codeの設定 r.py launch.json Dockerで…

Djangoからpostgresデータベースに効率よく接続する

Djangoで作成したWebアプリケーションをCloud Runで実行して,Cloud SQL postgresに接続する負荷テストを実施していたところ,以下のエラーが発生しました. psycopg2.OperationalError: FATAL: remaining connection slots are reserved for non-replicatio…

Cloud RunでDjangoの快適なlogging設定

Cloud RunでDjangoのプロジェクトを快適に実行するためのloggingについてまとめます. 実行環境 Python logging logging.Logger logging.Handler logging.Formatter logging.Filter logging.config.dictConfig DjangoのLOGGINGの設定 Cloud Logging 認証の準…

Pythonのmultiprocessingで色々な並列処理をする

Pythonのmultiprocessingを使って,並列処理を色々とやってみて,動作を確認してみました. 環境 CPU 3.2 GHz Quad-Core Intel Core i5 macOS 10.15.7 Python 3.8.6 4個のプロセスで関数を4回並列実行する import multiprocessing import time import os def…

Pythonでディレクトリを作成する

基本的なことですが,Pythonでディレクトリを作成する時に遭遇したエラーについてまとめます. FileExistsErrorに悩む ScrapyというPython framework にて,FileExistsErrorが100回に1回ぐらい発生する現象に遭遇しました. scrapy/extensions/feedexport.py…

PythonのBottleでbackground taskを処理する

何らかの時間がかかる処理を,非同期で実行するWebサービスを作成することを考えます. しばしば用いられる方法の1つに,Workerプロセスに分離する方法があります.ユーザーのリクエストに対してレスポンスを即座に返すWebプロセスと,内部で実際の処理を実…

DeepL翻訳で動物の種類を増やす

DeepL翻訳を使って,動物の種類を増やす実験をしてみます.これはみーの友達からいただいたアイディアを検証した記事です. DeepLに日本語を入力して,英語に翻訳します. うさぎとうなぎが400匹 うさぎが1匹。 One rabbit. うさぎにうなぎを追加します. う…

DjangoのcollectstaticでAmazon S3に直接アップロードするとParamValidationError

タイトルの通りですが,Djangoに django-storagesとboto3をインストールして,collectstaticを実行してAmazon S3に直接アップロードを試みましたが,ParamValidationErrorが発生しました. settings.py STATICFILES_STORAGE = 'storages.backends.s3boto3.S3…

Pythonパッケージの更新をRSSで追跡する

世の中Twitterなど様々なサービスがありますが,みーはRSSを使っています. Webサービスを運営する上で,使用しているパッケージの更新がないかを定期的に調べるのが面倒なので,よい方法はないかと試行錯誤した結果,PyPIのRSSを使うことにしました. 積極…

abs()の解説記事の違和感

Python入門|絶対値を求めるabs関数の使い方 という記事に,Pythonで絶対値を得る方法が解説されていました. 一般的な絶対値の求め方は対象となる数値を二乗した後に平方根を求めることで±記号を取り除きます。 そんな面倒なことをしなくても,負の数ならば…

Heroku のデータベースのプランを変更する

Heroku postgresのデータベースのプランを変更する方法は以下のドキュメントにとても詳しく記載されているのですが,少し困ったことがあったので整理してみます. Upgrading the Version of a Heroku Postgres Database | Heroku Dev Center 上記の記事を補…

Pythonで一括代入する時の注意

Pythonでは複数の変数に一括して値を代入することができます. a = b = 1 print(f"{a}, {b}. id={id(a)}, id={id(b)}") b = 2 print(f"{a}, {b}. id={id(a)}, id={id(b)}") これをPython3.8で実行すると, 1, 1. id=4347452064, id=4347452064 1, 2. id=4347…

Pythonのジェネレーター内包表記にハマった

バグの原因が分かるまでに2時間もかかったので,自分への戒めの記事です. 話を簡単にするために,4つのフルーツの名前を扱うプログラムを例に用います. fruits = set(["apple", "banana", "mango", "orange"]) print(sorted(fruits)) これをPython3.8で実…

PythonのEnumが遅い

みーが今作成しているPythonのソフトウェアが徐々にもっさりしてきたので,cProfileで原因を調べてみると,どうやらEnumがボトルネックになっていることが分かったので,Enumの速度についていろいろと検証してみました. 環境 Python 3.8.1 iMac Late 2015, …

Unicodeのマイナス記号を集めた

とある文字列を処理していて,検索してもヒットしないマイナス記号があったのでUnicodeを調べたところ,Unicodeにはたくさんのマイナス記号が存在することが分かりました*1. m = [ 0x05BE, 0x1806, 0x2010, 0x2011, 0x2012, 0x2013, 0x2014, 0x2015, 0x2212…

windowsでwslを使って快適なanacondaの環境を整える

Windows Subsystem for Linux (WSL) が便利になってきたので,Windowsで開発がしやすくなりました.Anacondaの環境を整えてみます. 環境 Windows 10 Home WSL Ubuntu 18.04 LTS Anaconda 2020.02 for Linux WSLのインストール WSL Ubuntu 18.04 LTSをインス…

Pythonで生存分析

Pythonで生存分析の練習をしながら統計の理解を深めるための記事です.この記事を読めば,統計のreview論文1つとPythonを用いた統計処理が追えるようになっています. Critical Care 2004, 8:389-394に書いてあることを適宜訳しながらPythonで検証します. …

dindからdoodへ

Docker-in-Docker (dind) を使わないでという記事を見つけた. Using Docker-in-Docker for your CI or testing environment? Think twice. dindを使おうと思っているなら,もう一度考え直すのだ.dindはDockerそのものの開発のために作られたものなのだ.di…

lifelinesで解析してみた

JupyterでKaplan-Meier 曲線を書いてみました. 使用したデータは German Breast Cancer Study Group 2 です. datasets — lifelines 0.24.1 documentation 項目 GBSG2 function | R Documentation horTh : hormonal therapy, a factor at two levels no and…

VS CodeでAnacondaのJupyter Labを快適に使う

Jupyterを使うには,Jupyterサーバーを立ち上げて,クライアントとしてブラウザーを使うのが標準です. これはこれでよくできているのですが,やはりVS Codeに慣れていると,いろいろと不自由なことが多いです.試しにVS Codeでipynbファイルを開いたら,Jup…

シングルトンを実装する

シングルトン とは,そのクラスのインスタンスが1つしか生成されないことを保証するデザインパターンのことであり,アプリケーション全体で1つの共通データがあればよい,という時に重宝します. シングルトンが必要になったので作ってみました. 通常のクラ…

Pythonの組み込み定数について

以下は一見不可解なコードだが,Pythonでエラーせず実行される. def a(): ... assert id(a()) == id(None) assert id(1 == 1) == id(True) assert id(1 == 0) == id(False) assert id(...) == id(Ellipsis) シングルトンの組み込み定数 Pythonにはシングル…

Rust 対 Python

Pythonだと100分かかる処理があったので,Rustで書き直したら4秒で処理できるようになった. その処理を実装するのに,Pythonだと10日しかかからなかったが*1,Rustだと30日かかった*2. 実装するのが大変だったが,処理速度が1500倍にパワーアップして感動…

PyO3でRustのメモリが開放されるのを確認する

Rustで作成したPython用のクラスがPythonのタイミングで自動的にメモリ開放されるかを確認してみました. 環境 Windows 10 Pro 64bit CPU : Core i3-7100U CPU @ 2.40GHz Memory : 12.0 GB rustc 1.42.0-nightly (2020-01-17) cargo 1.42.0-nightly (2020-01…