2015-09-25 56 views
0

好了,我有一个函数,主线程Python的线程,精氨酸变成自己进入名单

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个args设置为传递,每个字母为1。 如果我使用

def main_thread(self, *args): 

我只得到10个参数。我从来没有遇到过这个问题,但肯定必须有比字符串字母

回答

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 
+0

谢谢100万先生 – inadequateMonkey

+0

不用担心,这是一个容易犯的错误。 –

2

更好的方法,那是因为你没有传递一个元组到函数。试试这个:

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

ahhhh是的,就像在sqlite。谢谢,不能相信我错过了!非常感谢100万 – inadequateMonkey