Python 多進程報錯問題
windows環境下代碼如下
import multiprocessing import os import time def show_info(name, age): print(name, age) # 以元組方式傳參 sub_process = multiprocessing.Process(target=show_info, args=("李四", 20)) sub_process.start() # 以字典方式傳參 sub2_process = multiprocessing.Process(target=show_info, kwargs={"name": "張三", "age": 40}) sub2_process.start() # 以兩種方式傳參 sub3_process = multiprocessing.Process(target=show_info, args=("王五",), kwargs={"age": 60}) sub3_process.start()
運行會報如下錯誤
RuntimeError: An attempt has been made to start a new process before the current process has finished its bootstrapping phase. This probably means that you are not using fork to start your child processes and you have forgotten to use the proper idiom in the main module: if __name__ == '__main__': freeze_support() ... The "freeze_support()" line can be omitted if the program is not going to be frozen to produce an executable.
加上 if __name__ == '__main__' 後,錯誤消失
import multiprocessing def show_info(name, age): print(name, age) if __name__ == '__main__': # 以元組方式傳參 sub_process = multiprocessing.Process(target=show_info, args=("李四", 20)) sub_process.start() # 以字典方式傳參 sub2_process = multiprocessing.Process(target=show_info, kwargs={"name": "張三", "age": 40}) sub2_process.start() # 以兩種方式傳參 sub3_process = multiprocessing.Process(target=show_info, args=("王五",), kwargs={"age": 60}) sub3_process.start()
但是在linux和mac環境下,不加 if __name__ == '__main__' 是可以正常運行的,這是爲什麼呢?
請你們自己去思考哦。
小細節:windows創建多進程,會默認把當前文件全部代碼copy一份,放在其他創建出來的進程裏面去執行,就形成了無限遞歸。
而且進程之前不共享全局變量。每個進程裏面都有自己的一份兒全局變量