Python Threading,Arg将自己变成列表

时间:2015-09-25 12:16:31

标签: python multithreading list args

好的,所以我有一个功能,主线程

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

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

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

def main_thread(self, item):

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

def main_thread(self, *args):

我只得到10个参数。我之前从未遇到过这个问题,但肯定必须有一个更好的方法,而不是重新建立字母串字母

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

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