Python 线程化,Arg 将自己转成列表

Python Threading, Arg turns itself into list

好的,所以我有一个函数,主线程

def main_thread(self, item):
     print(item)

它被称为

item = self.queue.pop(0)
print(item)
threading.Thread(target=self.main_thread,args=(item)).start()

队列项目是'something',当我在调用线程之前打印它时,它打印正确。但出于某种原因,它总是变成一个列表 s,o,m,e,t,h,i,n,g, 意思是,我不能使用

def main_thread(self, item):

因为它说我试图传入 10 个参数,每个字母为 1。 如果我使用

def main_thread(self, *args):

我刚得到 10 个参数。我以前从未遇到过这个问题,但肯定有比逐个字母重建字符串更好的方法

那是因为您没有将元组传递给函数。试试这个:

threading.Thread(target=self.main_thread,args=(item,)).start()

args 应该是一个元组,您正在传递一个字符串,因此每个字符都被解释为一个参数:

args=(item,) # <- add a , to make a tuple

字符串是可迭代的,所以它等同于以下两者的区别:

In [2]: for ele in s:
   ...:     print(s)
   ...:     
foobar
foobar
foobar
foobar
foobar
foobar

In [3]: for ele in (s,):
           print(s)
   ...:     
foobar