2015-09-25 67 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

相關問題