Python多进程:传递单个multiprocessing.Array为何报错?如何解决?
解决multiprocessing仅传递Array时的TypeError问题
错误的核心原因是args参数的格式问题:在报错代码里,args=(arr)并没有创建一个包含单个元素的元组,Python会把multiprocessing.Array对象当作可迭代对象,将其内部的10个元素逐个拆解成参数传给函数f,但f只定义了1个参数,因此抛出「需要1个参数但传入了10个」的错误。
只需将单个参数包装成带逗号的元组,就能让Python识别这是一个元组参数,而非单个可迭代值。
修复后的完整代码:
from multiprocessing import Process, Array def f(a): for i in range(len(a)): a[i] = -a[i] if __name__ == '__main__': arr = Array('i', range(10)) # 关键:单个参数的元组必须加逗号 p = Process(target=f, args=(arr,)) p.start() p.join() print(arr[:])
重要提示
- 使用
multiprocessing.Process的args传递参数时,无论参数数量多少,都必须传入元组。 - 传递单个参数时,必须写成
(参数,)的形式,仅用(参数)会被Python解析成单个值,而非元组。
内容的提问来源于stack exchange,提问作者Andrew H
相关产品推荐
相关产品推荐

