2016-04-30 108 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例如开始每个工作人员都可以从共享内存映射文件中读取自己的数据片并对其进行处理。