18 日目(晴れ)次号、時は流れ去り……御無礼!
0:10 ベッドに潜る。寝る。
7:10 起床。外出。まず柳北公園に寄り道する。掃除中なのでまた来ることにする。
7:35 なか卯昭和通り店で朝食。納豆が朝定食。
柳北公園に立ち寄ってゴミを処分。急に腹が痛くなる。日陰で腰掛けて休む。 おやつを調達するのを忘れてそのまま宿に戻る。トイレでブリブリする。
デスクワークを始める。Python をやる。直近の学習状況を整理しよう。
- 並行実行 — Python 3.8.3rc1 ドキュメント
threading: マルチスレッドからなるプログラムを作る。Threadはコンストラクター直接利用、サブクラス化の手法、join()を理解した。Lock,Semaphore,Condition,Eventなどの同期概念の理解に自信がない。queue.Queueを使えるから後回しになった。
multiprocessing: マルチサブプロセスを生成するプログラムを作る。threadingの API と一致している要素は理解する。Processはthreading.Threadと酷似している。あとから何とかなる。Poolmap()などを使ったいちばん単純な用法は理解した。- 非同期バージョンの API を理解していない。
Queueはqueue.Queueと同じように使うことを理解した。.done_task()および.join()がない。JoinableQueueにはある。
Pipe- 目的は
Queueと似ている。.recv()や.send()でサブプロセス間の通信に利用する。
- 目的は
Lockなどの同期概念理解はthreadingのそれと同じなので同時に理解する。- キューやパイプを活用することで同期は避けることを理解する。
- マルチサブプロセスプログラミングではそもそも同期を必要としないことを理解する。
- サブプロセス間の状態の共有は避けるべきであることを理解する。
Managerは手つかず。データ共有に関係するクラスだから後回し。multiprocessing.connection関係は理解していない。コードがソケットプログラミングのそれに似ている。- ガイドラインを理解する。
- サブプロセスに対する
join()がマルチスレッドプログラミングにおけるスレッドに対するそれ以上に重要であることを理解する。 - サブプロセスを強制終了することは全力で避けることを理解する。
- 標準入力の扱いが微妙であることを理解する。
- サブプロセスに対する
concurrent.futures: Executor 各種を利用するプログラムを作る。ThreadPoolExecutorとProcessPoolExecutorの特性の違いを理解した。.sumbit()と.map()の違いを理解する。- クラス
Futureを理解する。asyncioのそれと同じ概念か確かめる。 - 関数
as_completed()とwait()を理解する。
subprocess: プロセス開始、パイプ接続をするプログラムを作る。subprocess.run()が高水準 API なのでこれから理解する。- よく使うはずのキーワード引数を覚える。
- 返り値のクラス
CompletedProcessを理解する。
- クラス
Popenがラップされたものだと理解する。 - Win32 API
CreateProcess()に相当することを理解する。
12:25 multiprocessing 版 Producer/Consumer パターン画像回転スクリプトを書けた。
この枠組だとキューの join が不自然になるので、ソケットプログラミングの要領で空のタスクを
pop したらワーカーサブプロセスを終えるでいい。
昼間の食料の貯蔵がポテチ二袋分しかないので近所に買い出しに行く。 肉のハナマサ浅草橋店でいいはずだったが、パンがないので遠出決定。
江戸通りのセブンイレブンに寄り道。奇跡的に二週間前に出たキンマが置いてある。 時世柄立ち読みしづらいので、むこうぶちを超速読でチェック。 多河と裕太の対戦、安永と秀の会話、江崎と後堂、最終卓へという感じだ。いずれしっかり読みたい。
西友浅草 ROX 店に移動。ワゴンにいい感じにパン類が積まれているがロールパンがない。
14:10 ドンキ浅草店に移動。ここでいい感じに買い物をする。250 円
- レーズンロール (5)
- ロール (5)
- 大きなチョコデニッシュ
レジで 300 円出したと思ったら釣りがなかったので気づかぬ間に 50 円硬貨を出していたのか。 あとで所持金が出納帳の把握金額と一致しているか確認したい。
14:50 宿に戻る。おやつ休憩。
17:10 concurrent.futures の学習終わり。Executor の .submit() と .map() の処理時間を比較する。
両者を連続して呼ぶと、いつも後に呼んだほうが処理時間が短い。結果がキャッシュされている説が浮上。
19:10 外出。いつもの清洲橋通りに向かう。
19:40 ライフ神田和泉町店で晩飯を調達。419 円。
- かき揚げそば
- チーズフランス
19:50 部屋に戻る。そばの汁を開封するときに若干床にこぼす。急いで自前のスポーツタオルで拭き取る。 電子レンジで加熱している間に昼の釣り銭を確認する。問題ないようだ。
晩飯にする。書いてあるとおりの電力と時間で加熱したら熱い。
- A Concrete Introduction to Probability (using Python): 速読するといろいろと興味深いことが書いてある。
22:00 まで麻雀の練習をする。それから入浴。22:30 出浴。 また麻雀の練習をする。今晩はよく負ける。
