You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python多进程传递字符串参数至类方法时被拆分为单个字符的原因排查

问题:传递字符串参数给多进程方法时被拆分为字符元组

我正把类似ba4dfb43-46a6-44ec-9249-18bdf6621b01的字符串变量传递给VolumesParallel类中的strike方法,但在类内部调用该方法时,参数被拆分成了单个字符组成的元组,比如:('b', 'a', '4', 'd', 'f', 'b', '4', '3', '-', '2', '8', '7', '5', '-', '4', 'b', '8', 'd', '-', 'b', 'a', '5', 'd', '-', '1', '8', 'b', 'd', 'f', '6', '6', '2', '1', 'b', '0', '1', '\n')。

相关代码

进程调用代码

for item in run_list:
    print('item passing to processes1')
    print(item) # 此处item打印正常,类型为str
    p1 = Process(target=runclass.crowdstrike, args=(item))

类定义代码

# ========================== Main Class =============================
class VolumesParallel(object):
    # ============================= Multiprocessing CS CODE ======================================
    def strike(self, *item):
        print('inside the class')
        print(item)

问题原因与解决办法

这问题其实是Python多进程Process类的args参数使用方式不对导致的,算是个很常见的小坑。

args要求传入的是一个元组,但你写args=(item)的时候,Python并不会把它当成元组——括号在这里只是用来分组表达式,实际传递的就是item本身(那个字符串)。而你的类方法strike用了*item这种可变参数,Python会把传入的可迭代对象(字符串本身就是字符的迭代器)拆成一个个元素,最终就变成了字符组成的元组。

解决办法很简单:

只需要在args里把单个元素写成带末尾逗号的元组,也就是把进程调用代码改成:

for item in run_list:
    print('item passing to processes1')
    print(item) # 此处item打印正常,类型为str
    p1 = Process(target=runclass.crowdstrike, args=(item,))  # 注意这里的逗号

那个末尾的逗号是关键,Python靠它来识别这是一个单元素元组,而不是普通的表达式分组。

另外提个小细节:你的类里定义的方法是strike,但进程调用的是runclass.crowdstrike,要确保这是同一个方法,避免笔误导致的其他问题哦。

内容的提问来源于stack exchange,提问作者yaarnick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 18:07:30