Closed5

cpprb開発で得た/調べた Python/Cython知見 (主にmultiprocessing関連)

山田(ymd)山田(ymd)

multiprocessing.Process は、3.8 から macOS も spawn がデフォルトに変更。(Windowsは元々 spawnのみ)
spawn は fork と異なり、pickle 可能なものだけが渡せる。

バージョン 3.8 で変更: macOS では、 spawn 開始方式がデフォルトになりました。 fork 開始方法は、サブプロセスのクラッシュを引き起こす可能性があるため、安全ではありません。 bpo-33725 を参照。

https://docs.python.org/ja/3/library/multiprocessing.html#contexts-and-start-methods

山田(ymd)山田(ymd)

カスタム __reduce__() の定義

引数

なし

戻り値

pickle から復元するための要素数 2~6 の tuple
(6番目は、3.8 からの追加)

  1. 初期オブジェクトを生成するための callable
  2. 上記 callable の引数の tuple。無引数のときは、空の tuple を渡す
  3. __setstate__() に渡すための状態。__setstate__() がなければ、 __dict__ に追加される
  4. 変数を yield するイテレータ。 obj.append(item) または、 obj.extend(list_of_items) で追加される
  5. key-value ペアをyieldするイテレータ。obj[key] = value でセットされる
  6. callable。callable(obj,state) で呼び出す。Noneでなければ、 __setstate__() の代わりに利用される。

https://docs.python.org/3.9/library/pickle.html

このスクラップは2021/01/10にクローズされました