繁体   English   中英

python中的多处理,多个进程运行相同的指令

[英]Multiprocessing in python, multiple process running same instructions

我在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;

打印“hello”正在执行多次,我猜测创建的单个进程应该在目标而不是主代码上运行。

任何人都可以建议我在哪里错了。

在此输入图像描述

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

使用multiprocessing可能不会加速从磁盘读取数据,因为磁盘访问比例如RAM访问或计算慢得多。 并且文件的不同部分将最终出现在不同的进程中。

使用mmap 可以帮助加快数据访问速度。

如果开始例如Pool.map 之前对数据文件执行只读mmap ,则每个工作者都可以从共享内存映射文件中读取自己的数据片段并对其进行处理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM