2016-01-27 120 views
2

我有一個python多處理隊列的問題。 我正在做一些數據的硬計算。我創建了幾個進程來降低計算時間,並且在將數據發送到進程之前,數據也被均勻分配。它很好地減少了計算時間,但是當我想要通過多處理返回進程中的數據時。需要時間和整個事情比在主線程中計算慢。Python多處理隊列緩慢

processes = [] 
    proc = 8 
    for i in range(proc): 
      processes.append(multiprocessing.Process(target=self.calculateTriangles, args=(inData[i],outData,timer))) 
    for p in processes: 
     p.start() 
    results = [] 
    for i in range(proc): 
     results.append(outData.get()) 
    print("killing threads") 
    print(datetime.datetime.now() - timer) 
    for p in processes: 
     p.join() 
    print("Finish Threads") 
    print(datetime.datetime.now() - timer) 

所有線程在完成時都打印完成時間。下面是此代碼的示例輸出

0:00:00.017873 CalcDone  
0:00:01.692940 CalcDone 
0:00:01.777674 CalcDone 
0:00:01.780019 CalcDone 
0:00:01.796739 CalcDone 
0:00:01.831723 CalcDone 
0:00:01.842356 CalcDone 
0:00:01.868633 CalcDone 
0:00:05.497160 killing threads 
60968 calculated triangles 

正如您所看到的,一切都很安靜,直到此代碼爲止。

for i in range(proc): 
     results.append(outData.get()) 
    print("killing threads") 
    print(datetime.datetime.now() - timer) 

這裏是我對礦山計算機和慢一點的一些觀察。 https://docs.google.com/spreadsheets/d/1_8LovX0eSgvNW63-xh8L9-uylAVlzY4VSPUQ1yP2F9A/edit?usp=sharing。在較慢的一個,你沒有看到任何改善。

爲什麼在處理完成後需要很長時間從隊列中獲取項目?有沒有辦法加快速度?

回答

3

所以我自己解決了。計算速度很快,但通過一個過程複製對象到另一個過程像年齡。我只是做了一個清除對象中所有不必要的字段的方法,使用管道也比多處理隊列更快。它讓我的電腦速度慢了15秒(從29秒)。