背景: 我有一個巨大的文件.txt
我必須處理。這是一個data mining
項目。 所以我把它拆分了許多.txt
文件每一個100MB
大小,保存他們都在同一個目錄,並設法在他們這樣說:的Python - 多和文本文件處理
from multiprocessing.dummy import Pool
for filename in os.listdir(pathToFile):
if filename.endswith(".txt"):
process(filename)
else:
continue
在過程中,我解析文件到對象列表中,然後我應用另一個函數。這是SLOWER比按原樣運行整個文件。但對於足夠大的文件,我將無法立即運行,我將不得不分片。所以我想要有線程,因爲我不必等待每個process(filename)
完成。
我如何申請呢?我檢查this,但我不知道如何將它應用到我的代碼...
任何幫助,請將不勝感激。 我看了here看看如何做到這一點。我已經試過:
pool = Pool(6)
for x in range(6):
futures.append(pool.apply_async(process, filename))
不幸的是,我意識到這隻會做前6個的文本文件,或將不是嗎?我怎樣才能使它工作?一旦一個線程結束,爲其分配另一個文件文本並開始運行。
編輯:
for filename in os.listdir(pathToFile):
if filename.endswith(".txt"):
for x in range(6):
pool.apply_async(process(filename))
else:
continue
在循環中傳遞所有文件名。 6意味着6個文件將被同時處理。但不知道你會因爲Python GIL和線程而獲得速度。你應該看看多處理。 –
您是在談論線程池還是進程池? – roganjosh
@roganjosh,它是相同的程序,所以它必須是線程,不是嗎? –