在打包 python script 為 windows binary 時, 如果source code 有使用到 multiprocessing 會出錯, 造成錯誤的程式是這一行:
pid = reader.recv()
完整程式碼:
# create pipe
reader, writer = multiprocessing.Pipe(False)
# do not keep reference
multiprocessing.Process(
target=_start_detached,
args=(executable, *args),
kwargs={"writer": writer},
daemon=True,
).start()
# receive pid from pipe
pid = reader.recv()
解法, 在呼叫前執行這二行:
from multiprocessing import freeze_support freeze_support()
這個解法, 只對輸出為資料夾型態的 exe 檔有用.
聽說只有 windows 版的 multiprocessing 才會有問題, 其他平台沒有.