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
好的,所以我有一个函数,主线程
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