お知らせ:

【 Effective Python, 2nd Edition 】Queue クラスを利用した producer-consumer パイプライン ( pipelines ) を構築して、マルチスレッドシーケンス処理をエレガントに管理しよう! 並行実行 ( parallelism ) と並列処理 ( concurrency ) もついでにちゃんとイメージしよう!

Tags: python , thread , pipeline , concurrency , queue , parallelism , producer-consumer , effective

Published 2020年8月21日16:25 by T.Tsuyoshi

唐突ですが、放牧飼いをしている乳牛を搾乳する手順を考えます。牛たちはもう搾乳室 ( パーラー ) の前に集まっています、良い子!! a: 搾乳室の入口を開けて1頭1頭牛を呼び込みます。 1: 乳頭の汚れを落とし、かつ、刺激します ( 泌乳ホルモン分泌のために )。 2: ミルカーを装着して搾乳します。 3: 搾乳が終了したら乳頭にディッピング ( 消毒のよ…

【Python 雑談・雑学 + coding challenge】Python の pprint 機能を自分で実装してみよう! 自分なりの Pretty Print できちゃいます!!

Tags: miscellaneous , challenge , python , pprint , pretty print

Published 2020年8月19日8:17 by T.Tsuyoshi

Python では pprint モジュールが提供されていて、ネストしているデータ構造を階層的に出力してくれます。 from pprint import pprint a = [1, 2, 3, 4, 5] b = [1, [2, [5, 6], 3], 4] pprint(a, indent=4, width=15) # [1, 2, 3, 4, 5] …

【 Effective Python, 2nd Edition 】threading モジュールの Lock クラスを利用してマルチスレッド実行時のデータ競合 ( data races ) を予防しよう! GIL はデータ構造 ( data structure ) の安全性まで面倒を見てくれません

Tags: python , muttual-exclusion lock , multi threading , effective , lock

Published 2020年8月17日15:59 by T.Tsuyoshi

こちらの記事 で、Python におけるマルチスレッド実行は GIL ( Global Interpreter Lock ) の制約を受けてある瞬間に動作している CPU コアは 1 つだけであり、シリアル実行とトータルな実行時間は変わらない、それは、予期しない割り込みによってインタプリタが保持しておくべき状態が影響を受けないようにするためだ、という話をしました。 であれば、プログラム…

【 Effective Python, 2nd Edition 】Python のスレッド ( thread ) はブロッキング I/O ( blocking I/O ) 対策で存在しています。決して並行処理 ( parallelism ) を実現するためではありません!

Tags: gil , python , thread , blocking io , effective

Published 2020年8月15日22:18 by T.Tsuyoshi

Python の標準実装は CPython と呼ばれ、Python プログラムを 2 ステップで実行します。 まず最初に、ソースコードを解析し、バイトコード ( bytecode ) へとコンパイルします。 続いて、そのバイトコードをスタックベースのインタプリタ ( stack-based interpreter ) で実行します。 そのインタプリタは、GIL ( …

【Python 雑談・雑学 + coding challenge】iterator protocol の実装 --- __iter__ 特殊関数は何を返すべき? イテレータオブジェクト ( iterator object ) なら何でも、そう、generator expression でもOKです!

Tags: generator , iterable , iterator , __iter__ , miscellaneous , challenge , __next__ , stopiteration , python

Published 2020年8月13日17:06 by T.Tsuyoshi

さて、今回もちょっとしたコーディングチャレンジ ( coding challenge ) から。 問題 ( 制限時間: 25 分 ): 2 つの引数 (シーケンスと数値) を取るイテラブルクラス ( iterable class ) を定義します。 このクラスのオブジェクトは、「数値」の回数だけ「シーケンス」の要素を順番に返します。 もし「数値」が「シーケ…