在打包 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 才會有問題, 其他平台沒有.