运行Python脚本并行化

16

我有一个包含6000个视频的大型数据集,使用名为process.py的Python脚本进行处理。问题是处理整个数据集需要很长时间。因此,我想到将数据集分成4个部分,然后将相同的代码复制到不同的Python脚本(例如process1.pyprocess2.pyprocess3.pyprocess4.py),并在不同的shell中运行每个脚本来处理不同部分的数据集。

我的问题是这样做是否有助于提高性能?我有一台有10个核心的机器,如果我能利用这个多核结构,那将非常有益。我听说过Python的multiprocessing模块,但不幸的是,我对它不太了解,并且我编写脚本时没有考虑使用其功能。同时我想知道,启动不同shell上的每个脚本是不是无意义的?是否有一种方法可以选择每个脚本使用哪个核心?


哪个操作系统?例如Windows或Linux。 - Anthony Kong
Linux(Ubuntu 14.04)。 - chronosynclastic
1个回答

17

multiprocessing文档(https://docs.python.org/2/library/multiprocessing.html)相对容易理解。这部分(https://docs.python.org/2/library/multiprocessing.html#using-a-pool-of-workers)尤其相关。

你绝对不需要多份相同的脚本。你可以采用以下方法:

假设这是你现有脚本(process.py)的一般结构:

def convert_vid(fname):
    # do the heavy lifting
    # ...

if __name__ == '__main__':
   # There exists VIDEO_SET_1 to 4, as mentioned in your question
   for file in VIDEO_SET_1:  
       convert_vid(file)

使用multiprocessing,您可以在单独的进程中启动函数convert_vid。以下是一般方案:

from multiprocessing import Pool

def convert_vid(fname):
    # do the heavy lifting
    # ...

if __name__ == '__main__':
   pool = Pool(processes=4) 
   pool.map(convert_vid, [VIDEO_SET_1, VIDEO_SET_2, VIDEO_SET_3, VIDEO_SET_4]) 

您能否帮忙查看一下(stackoverflow.com/questions/68305077/…)?我正在尝试应用您提供的想法,但不确定如何传递不同的数据集和数据集名称。 - Opps_0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接