2013-12-19 34 views
0

這裏是我的一段代碼,我想使用多線程蟒蛇多線程提供了錯誤類型

unipidA = ['list of data IDs with 6 characters each'] 

import threading; 
from time import ctime() 

def parse_data('give_data_id'): 
    < code to parse data from server and 
     each data ID has unique 6 character string e.g 'Q9NR22', 'Q86WR7' etc> 

    print 'The data ', data_id, ' has been parsed' 


def main(): 
    print 'Data Parsing Started at ', ctime() 
    threads = [] 
    mylen = range(len(unipidA)) 
    for i in mylen: 
     print unipidA[i] 
     t = threading.Thread(target = parse_data ,args=(unipidA[i])) 
     threads.append(t) 

    for i in mylen: 
     threads[i].start() 

    for i in mylen: 
     threads[i].join() 

    print 'all done at:', ctime() 

當我運行它爲:

>>> main() <Enter> 

它提供了以下錯誤

>>> File "/usr/lib/python2.7/threading.py", line 504, in run 
     self.__target(*self.__args, **self.__kwargs) 
    TypeError: parse_data() takes exactly 1 argument (6 given) 

有人可以解釋爲代碼是非常原始的多線程,但我仍然無法跟蹤問題。謝謝!

+0

將''give_data_id''傳遞給'parse_data()'是什麼?你的意思是'parse_data(give_data_id):'? – Julio

+0

這是來自unipidA列表的功能將運行如 parse_data(unipidA [i])#我是任何索引 – Ashutosh

+0

是的,但你有你的參數引號。 – Julio

回答

2
args=(unipidA[i]) 

這不是你所想的那樣。圓括號不會使它成爲一個元組,在這種情況下,它只是相當於args=unipidA[i]。我想在這種情況下,它是一個長度爲6的字符串

爲了使一個元組,你可以正確地傳遞爲args參數,添加一個尾隨逗號:

t = threading.Thread(target = parse_data ,args=(unipidA[i],)) 

另請參見:

>>> (1) 
1 
>>> (1,) 
(1,) 
+0

是的....我現在得到它,感謝它的工作 – Ashutosh