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的函數指針的用法, 而非函數調用.

可見, 子進程的啓動順序和創建順序並不一致.
博客内容讲述了在使用Python的multiprocessing模块创建子进程时遇到的问题,即目标函数只接受一个位置参数,但传入了两个。问题源于对multiprocessing.Process()函数参数传递方式的理解错误。解决方案是将参数以元组形式传入,如`args=(str(i),)`,注意末尾的逗号不能省略。修正后的代码成功避免了TypeError,并强调了子进程启动和创建的顺序不一致。
6540

被折叠的 条评论
为什么被折叠?



