我在Python中使用多处理进行并行化。 我尝试使用pandas对从excel文件读取的数据块进行并行处理。
我是多处理和并行处理的新手。在简单代码的实现过程中,
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;
印刷品"你好"正在执行多次,我猜测创建的单个进程应该在目标而不是主代码上工作。
任何人都可以建议我在哪里错。
答案 0 :(得分:3)
multiprocessing
的工作方式是创建一个新进程,然后使用目标函数导入该文件。由于您的最外层范围具有print语句,因此每个进程都会执行一次。
顺便说一下,您应该直接使用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
答案 1 :(得分:0)
使用multiprocessing
可能无法加速从磁盘读取数据,因为磁盘访问速度 比RAM访问或计算。文件的不同部分最终会在不同的过程中结束。
使用mmap
可以帮助加快数据访问速度。
如果您在开始之前执行数据文件的只读mmap
,例如a Pool.map
,每个工作者都可以从共享内存映射文件中读取自己的数据片段并进行处理。