2014-04-10 50 views
2

我有這樣的代碼:多重類型錯誤

import multiprocessing as mp 
import shutil 
import md5 

def f(src,dst): 
    shutil.copy2(src,dst) 

file_1 = "C:\Users\Nick\Documents\production\TEST\\test.txt"  
file_2 = "C:\Users\Nick\Documents\production\TEST_2\\test.txt" 

def get_md5(file_name): 
    with open(file_name) as file_to_check: 
     # read contents of the file 
     data = file_to_check.read()  
     # pipe contents of the file through 
     md5_returned = md5.new(data).hexdigest() 
     print md5_returned 

if __name__ == '__main__': 
    P = mp.Process(target=f, args=(file_1,file_2)) 
    s = mp.Process(target=get_md5, args=(file_1)) 
    P.start() 
    P.join() 
    s.start() 
    s.join() 

我只是測試如何在瞬間使用多,但get_md5函數拋出一個類型的錯誤。 錯誤消息是這樣的:

Traceback (most recent call last): 
    File "C:\Python27\lib\multiprocessing\process.py", line 258, in _bootstrap 
    self.run() 
    File "C:\Python27\lib\multiprocessing\process.py", line 114, in run 
    self._target(*self._args, **self._kwargs) 
TypeError: get_md5() takes exactly 1 argument (48 given) 

在我看來,好像有論據get_md5進程只有一個,我不知道在哪裏48個爭論的來源。

任何人都可以幫忙嗎?

回答

6

我想,你必須通過ARGS爲元組:

s = mp.Process(target=get_md5, args=(file_1,)) 

你缺少逗號。如果您錯過逗號,file_1中的單個字符將視爲單獨的參數。

編輯:

包括Adam Smith's反應,我認爲適當的上下文:

它看起來像Process接受*args**kwargs,當你把它r"C:\Users\Nick\Documents\production\TEST\\test.txt"它遍歷它給這意味着*args == ["C",":","\\","U","s","e","r","s","\\","N", ... ]