Python 多進程報錯問題

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一份,放在其他創建出來的進程裏面去執行,就形成了無限遞歸。

而且進程之前不共享全局變量。每個進程裏面都有自己的一份兒全局變量

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章