2016-04-30 107 views
0

我在Python中使用多處理進行並行化。 我想並行化使用大熊貓從Excel文件讀取的數據塊上的進程。python多進程,多進程運行相同的指令

我是新來的多處理和並行處理。在實施過程中對簡單的代碼,

import time; 
import os; 
from multiprocessing import Process 
import pandas as pd 
print os.getpid(); 
df = pd.read_csv('train.csv', sep=',',usecols=["POLYLINE"],iterator=True,chunksize=2); 
print "hello"; 
def my_function(chunk): 
    print chunk; 
count = 0; 
processes = []; 
for chunk in df: 
    if __name__ == '__main__': 
     p = Process(target=my_function,args=(chunk,)); 
     processes.append(p); 
    if(count==4): 
     break; 
    count = count + 1; 

打印「你好」正在被執行多次,我猜應該建立在目標工作,而不是主代碼的單個處理器。

任何人都可以建議我,我錯了。

enter image description here

回答

2

的方式,multiprocessing工作是創建一個新的過程,然後與目標功能導入文件。由於最外層的範圍有打印語句,因此每個進程都會執行一次。

順便說一下,您應該直接使用Pool而不是Process es。這裏有一個清理例如:

import os 
import time 
from multiprocessing import Pool 

import pandas as pd 

NUM_PROCESSES = 4 


def process_chunk(chunk): 
    # do something 
    return chunk 


if __name__ == '__main__': 
    df = pd.read_csv('train.csv', sep=',', usecols=["POLYLINE"], iterator=True, chunksize=2) 
    pool = Pool(NUM_PROCESSES) 

    for result in pool.map(process_chunk, df): 
     print result 
0

使用multiprocessing大概不會加快從磁盤讀取數據,因爲磁盤訪問比例如慢 RAM訪問或計算。並且該文件的不同部分將以不同的過程結束。

使用mmap可能有助於加速數據訪問。

如果你做一個只讀之前的數據文件mmap例如開始每個工作人員都可以從共享內存映射文件中讀取自己的數據片並對其進行處理。