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

python中的多进程,运行相同指令的多进程,python,multiprocessing,python-multiprocessing,Python,Multiprocessing,Python Multiprocessing,我正在使用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=

我正在使用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”被多次执行,我猜创建的单个进程应该在目标代码上工作,而不是在主代码上

谁能告诉我哪里错了


多处理的工作方式是创建一个新进程,然后使用目标函数导入文件。因为最外层的作用域有print语句,所以每个进程将执行一次

顺便说一下,您应该使用
池,而不是直接使用
进程。下面是一个经过清理的示例:

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

使用
多处理
可能不会加快从磁盘读取数据的速度,因为磁盘访问比RAM访问或计算等慢得多。文件的不同部分将在不同的过程中结束

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

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