在我的代碼中有一個函數應該讀取文件。每個文件大約8M,但是讀取速度太低,並且爲了改進我使用多處理.sadly,它似乎它被阻止了。我想知道是否有任何方法可以幫助解決這個問題並提高閱讀速度?python多處理讀取文件花費太多時間
我的代碼如下:
import multiprocessing as mp
import json
import os
def gainOneFile(filename):
file_from = open(filename)
json_str = file_from.read()
temp = json.loads(json_str)
print "load:",filename," len ",len(temp)
file_from.close()
return temp
def gainSortedArr(path):
arr = []
pool = mp.Pool(4)
for i in xrange(1,40):
abs_from_filename = os.path.join(path, "outputDict"+str(i))
result = pool.apply_async(gainOneFile,(abs_from_filename,))
arr.append(result.get())
pool.close()
pool.join()
arr = sorted(arr,key = lambda dic:len(dic))
return arr
和呼叫功能:
whole_arr = gainSortedArr("sortKeyOut/")
似乎問題是在主進程中收集數據期間的序列化/反序列化。 – newtover
通過跳過中間字符串...'temp = json.load(file_from)',您將獲得適度的增益。 – tdelaney
這裏沒有mp優勢。您在子進程中解碼JSON,但在返回父進程時必須重新序列化和反序列化。它可能慢於在一個文件中完成所有操作。在這裏,用低並行計算的轉換成本很高。 – tdelaney