1.問題描述
報錯出現于創建子進程, 目標函數的傳參過程中.
意思是說, 目標函數只有1个位置參數, 卻給了2个.
原因在于, multiprocee.Process()這个函數的傳參語法細節.
2.問題解決
原錯誤代碼:
...
p = Process(target=proc_run, args=str(i))
...
原報錯信息:
...
self._target(*self._args, **self._kwargs)
TypeError: proc_run() takes 1 positional argument but 2 were given
關鍵字參數args接收的是目標函數proc_run的實參, 即便只有1个參數, 也要求以元組形式傳入, 上述寫法有誤;
修正後代碼:
...
p = Process(target=proc_run, args=(str(i),))
...
注意, 不能省略末尾的逗號, target參數的函數是函數名, 不帶括號(), 此處是類似于C的函數指針的用法, 而非函數調用.
可見, 子進程的啓動順序和創建順序並不一致.