如何获取封装到类中传递给multiprocessing.Process的函数返回值
错误原因
核心错误是多进程实例创建时的参数传递格式不符合要求:
Python语法中,仅用括号包裹单个元素不会被识别为元组,必须在元素后额外加逗号才会生成单元素元组。你编写的args=(self.localStats)实际上等价于直接把共享字典对象赋值给args参数,而multiprocessing.Process的args参数要求传入可迭代对象,运行时会迭代该对象,将每一项作为单独参数传递给目标函数。
迭代字典默认是迭代字典的键,你的共享字典第一个键为字符串cptr_name,因此最终传给GatherSomeStatsA、GatherSomeStatsB的returnStats参数实际是字符串cptr_name,对字符串执行下标赋值操作自然会抛出'str' object does not support item assignment的错误。
修复方案
只需修改runInParallel方法中创建Process的代码行,给args参数的单个元素后添加逗号,使其成为合法的单元素元组即可:
# 错误写法 process = multiprocessing.Process(target=fn, args=(self.localStats)) # 正确写法 process = multiprocessing.Process(target=fn, args=(self.localStats,))
修改完成后运行代码即可得到预期输出:
{'cptr_name': 'SOMEMACHINENAME', 'some_stats_A': True, 'some_stats_B': True}
补充注意:你的代码中使用了
subprocess模块但未添加导入语句,后续实际使用run_task函数前需要补上import subprocess。
内容的提问来源于stack exchange,提问作者Franck Mesirard
相关产品推荐
相关产品推荐

