python多進程demo

任務需求,在聲紋識別任務中,模型庫可能比較大,如果單線程的話,每個測試句都跟幾百個模型計算得分,那麼測試過程太慢了。這裏採用 多進程 和 多線程(暫時空白) 的方式進行處理。

多進程版本(省略了內部函數實現)

print("Test Stage")
print("test length ", len(testList))
#這個test的數據太多了,並且每一個要跟500個model進行計算,所以必須採用多進程的方法
def compute_likelihood_scores_single(testlist):
    result_lines = []
    for i in range(len(testlist)):
         result_line = 'your result'
        result_lines.append(result_line)
        print("Cur: ", result_line)
    return result_lines

pool = Pool(nj)
one_list_length = int(len(testList) / nj)
all_test = []
start = 0
for i in range(nj-1):
    start = one_list_length * i
    print(start, start + one_list_length)
    all_test.append(testList[start: start + one_list_length])
all_test.append(testList[start+one_list_length:])
print([len(list) for list in all_test])
all_results_lines = pool.map(compute_likelihood_scores_single, all_test)
all_results_lines = sum(all_results_lines, [])
pool.close()
pool.join()
all_num = len(all_results_lines)

如果你用的是python2.7, 並且遇到了這個錯誤:

cPickle.PicklingError: Can't pickle <type 'module'>: attribute lookup __builtin__.module failed

有很多解決方法,但是基本都看不太明白,也不是很好解決。
不過最好的方法就是抓緊換python3.5跑,因爲python3.3解決了這個問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章