2025-01-01から1年間の記事一覧
過去数回の記事で Requests や httpx の問題点や細かい挙動について触れてきました。これらのライブラリの代わりになるもう一つの有力なHTTPクライアントとして Niquests を紹介します。 NiquestsはRequestsのforkで、高い互換性を保ちながら、非同期処理やH…
前回の記事でhttpxの検討を進めた後にこんな気になる記事を見かけたので現状を調査しました。 gfx.hatenablog.com 結論から言うと、これは httpx を async で利用する時の問題で、現状ではまだ解決されていません。同期APIを使っていれば問題ありません。 原…
Pythonで一番人気のあるHTTPクライアントライブラリはrequestsですが、requestsやその低レイヤーであるurllib3はidle_timeoutの設定を持っていないので、長時間アイドルが続いた接続を再利用した時に Connection Reset by Peer エラーが発生することがありま…
functools.cache は便利ですが、メソッドに対して使う時には注意が必要です。 from functools import cache class A: @cache def f(self, x): return x * 2 for i in range(1000): a = A() a.f(42) print(A.f.cache_info()) # CacheInfo(hits=0, misses=1000…
httpx をコネクションプールありで使う場合は client = httpx.Client() して client.get() などを使いますが、コネクションプールなしで使う場合は httpx.get() などを使います。 この httpx.get() のような単発でHTTPリクエストを実行するAPIは実際には内部…
しかし、たとえば標準ライブラリの concurrent.futures.ThreadPoolExecutor はdamonスレッドを使っていません。 そのため、 executor.shutdown(wait=True) を atexit から呼び出すことができません。atexitで終了させるスレッドはdaemonにしよう - methaneの…
リストを受け取ってループで処理する関数を実装するとき、引数のタイプヒントに list ではなく最小の要求として Iterable を書くことを好む人がいる。コードの実装が引数に対して必要としている最小要件(必要十分条件)を表すためだ。 def func(arg: Iterable…
なにかの処理をバックグラウンドスレッドで実行して、アプリケーション終了時にその処理を止めたいことがあります。 たとえばOpenTelemetryのトレースやログを送信するためにスレッドが使われていますが、それらは終了時にバッファリングしているデータを送…
mysql-connector-python を使えば簡単なのですが、あえて mysqlclient を使う場合の話です。 まず、Pythonの公式DockerイメージはDebianベースになっていますが、Debianではデフォルトではapt-getでMySQLをインストールできません。 (Debian sid では MySQL …
Benchmark関数を書くとき、重い初期化処理が必要になるケースがある。 例えばデータベースから大量のデータを読み込むベンチマークを書きたい場合、まずはその大きいデータを持ったテーブルを作る必要がある。 Goのベンチマーク関数は、普通は実行時間がター…
go-mysql-driver のアロケーションを調査していて気づいた小ネタ。 --- a/benchmark_test.go +++ b/benchmark_test.go @@ -423,9 +423,9 @@ func BenchmarkReceiveMassiveRows(b *testing.B) { b.Errorf("failed to select: %v", err) return } + var i int …
MySQL 8.0がutf8mb4のデフォルトcollationを utf8mb4_0900_ai_ci に変更したことは有名です。 MariaDBも11.5からデフォルトcollationを変更したのですが、 utf8mb4_0900_ai_ci ではなく utf8mb4_uca1400_ai_ci になりました。 この2つのcollationについてはM…
まだPR段階なので peps.python.org では表示されていません。Discussionはこちらです。 PEP 781: Adding __type_checking__ constant - PEPs - Discussions on Python.org 今までもtypingのインポートを避けるために from typing import TYPE_CHECKING の代…
兄弟のように同じような設定でログインするサーバーが複数台あるとする。 Host *.myproj.example.com でまとめて設定できるものの、 ssh コマンドでホスト名を指定するのが面倒だ。 その場合、Host と hostname で短いエイリアスを作ることができるが、そう…
Python 3.13 を PyMySQL のCIに追加したら、次のようなエラーが発生した。 "Can't connect to MySQL server on '127.0.0.1' ([SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: Missing Authority Key Identifier (_ssl.c:1018))" 調べてみると…
mysqlclientの新バージョンをリリースするために uv publish *.whl したら、次のようなエラーが発生した。 Uploading mysqlclient-2.2.7-cp310-cp310-win_amd64.whl (202.9KiB) error: Failed to publish `mysqlclient-2.2.7-cp310-cp310-win_amd64.whl` to …
OTLPを使うときによく opentelemetry.sdk.trace.export.BatchSpanProcessor を使うが、このモジュールには計装ができているかを簡単に確認できる SimpleSpanProcessor と ConsoleSpanExporter がある。 # ... from opentelemetry.sdk.trace.export import Ba…
第7次エネルギー基本計画に向けて、2040年の発電コストの試算が発表された。 第5回 発電コスト検証ワーキンググループ|資源エネルギー庁 エネルギー基本計画は3年ごとに直されるが、今回の発電コスト試算で大きなトピックは、二酸化炭素排出コストと統合コ…