SUPPORT UKRAINE
- Your indifference to the act of cruelty can thrive rogue nations like Russia -
を参考にしているブログ一覧
【 Effective Python, 2nd Edition + coding challenge 】プログラム開発のどの段階で並列処理 ( concurrency ) が必要になるのだろう? そのときどのようにリファクタリング ( refactoring ) していけばいいのだろう? を考えてみるシリーズ ( のはず ) 第1回
Published 2020年8月25日10:18 by mootaro23
プログラムが大きくなってくれば、必然的に、その複雑さも増していきます。
コードの明快さ、テストのし易さ、効率性を維持しながらプログラムを大きくしていくのは、プログラム開発における最も難しい課題のひとつであることは疑う余地がありません。
またプログラムの拡大に伴う変更の中でも、シングルスレッドプログラムのマルチスレッドプログラムへの移行はもっとも困難を伴うもののひとつでしょう。…
【 Effective Python, 2nd Edition 】Queue クラスを利用した producer-consumer パイプライン ( pipelines ) を構築して、マルチスレッドシーケンス処理をエレガントに管理しよう! 並行実行 ( parallelism ) と並列処理 ( concurrency ) もついでにちゃんとイメージしよう!
Published 2020年8月21日16:25 by mootaro23
唐突ですが、放牧飼いをしている乳牛を搾乳する手順を考えます。牛たちはもう搾乳室 ( パーラー ) の前に集まっています、良い子!!
a: 搾乳室の入口を開けて1頭1頭牛を呼び込みます。
1: 乳頭の汚れを落とし、かつ、刺激します ( 泌乳ホルモン分泌のために )。
2: ミルカーを装着して搾乳します。
3: 搾乳が終了したら乳頭にディッピング ( 消毒のよ…
【 Effective Python, 2nd Edition 】threading モジュールの Lock クラスを利用してマルチスレッド実行時のデータ競合 ( data races ) を予防しよう! GIL はデータ構造 ( data structure ) の安全性まで面倒を見てくれません
Published 2020年8月17日15:59 by mootaro23
こちらの記事 で、Python におけるマルチスレッド実行は GIL ( Global Interpreter Lock ) の制約を受けてある瞬間に動作している CPU コアは 1 つだけであり、シリアル実行とトータルな実行時間は変わらない、それは、予期しない割り込みによってインタプリタが保持しておくべき状態が影響を受けないようにするためだ、という話をしました。
であれば、プログラム…
【 Effective Python, 2nd Edition 】Python のスレッド ( thread ) はブロッキング I/O ( blocking I/O ) 対策で存在しています。決して並行処理 ( parallelism ) を実現するためではありません!
Published 2020年8月15日22:18 by mootaro23
Python の標準実装は CPython と呼ばれ、Python プログラムを 2 ステップで実行します。
まず最初に、ソースコードを解析し、バイトコード ( bytecode ) へとコンパイルします。
続いて、そのバイトコードをスタックベースのインタプリタ ( stack-based interpreter ) で実行します。
そのインタプリタは、GIL ( …
【 Effective Python, 2nd Edition 】__set_name__ デスクリプタ専用特殊関数 ( special method for descriptor ) を利用してデスクリプタインスタンスを割り当てたクラス変数名を取得し、コードの冗長性を排除しよう!
Published 2020年7月28日21:30 by mootaro23
メタクラス ( metaclass ) を利用することで、クラスの「型」が完全に作られる前にクラス属性を操作することができます。
さらに、デスクリプタ ( descriptor ) を利用すると、デスクリプタインスタンスを含むクラスとその属性のよりきめ細かい操作が可能になるんです。
例えば、顧客データベースの各フィールドに相当するクラスを作成するとします。
今回は、…
【 Effective Python, 2nd Edition 】サブクラス定義に付随させて必ず行いたい操作がある場合は、メタクラス ( metaclass )、または、__init_subclass__ 特殊関数を利用してド忘れを防止しよう!
Published 2020年7月25日18:42 by mootaro23
メタクラスの用途として、ある属性の有無や属性値の値によってクラスの機能を変化させる、サブクラス定義に必要な属性が含まれているか、属性値は有効かを検証する、等がありますが、型を記録しておき将来的に復元可能にする、という操作にも最適です。
例えば、Python オブジェクトの「型紙」をパラメータの値も含めて JSON 形式にシリアル化しておき、将来的な復元に備えて保存したいとします。
…
【 Effective Python, 2nd Edition 】今回も懲りずにメタクラス ( metaclass ) - __init_subclass__() 特殊関数でメタクラスをもっと活用しよう!
Published 2020年7月23日18:23 by mootaro23
前回 は、メタクラスでどんなことができるのか、どんな動作をしているのか、ということを少しでも理解しようとモガいてみましたが、今回も懲りずに続きです。
今回はメタクラスの一般的な使い途の1つである「サブクラス定義の検証」を見ていきたいと思います。
「多角形 ( multisided polygon ) 」を象徴するクラスを考えます。
各サブクラスでは「何」角形であるの…