但不幸的是,線程/進程只能同時運行,如果沒有說法。
不,這不是問題。
問題是,你打電話給standard_download(link)
,然後將該調用的結果作爲target
參數傳遞。這不是你想要的;您想要將函數本身和參數傳遞給Process
對象,以便它可以調用它們。這正是args
參數的用途,如most of the examples for multiprocessing
所示。你的情況:
Process(target=standard_download, args=(link,)).start()
或者,你總是可以建立一個零參數函數lambda
或partial
,當然:
Process(target=functools.partial(standard_download, link)).start()
作爲一個側面說明,剛剛創建,啓動和滲出一堆兒童進程是一個壞主意。您可能希望將它們全部存儲在列表中,然後將它們全部(不管是立即還是稍後)都存儲起來。例如:
def download_from_file(filename):
if os.path.exists(filename):
links = [line.strip() for line in open(filename)]
for link in links:
p = Process(target=standard_download, args=(link,))
p.start()
yield p
processes = list(download_from_file(filename))
# later, when we need to wait until we're done with all the downloads
for process in processes:
process.join()
非常感謝!爲我工作:) – Exceen 2014-10-20 20:48:05