2015-11-04 190 views
0

我有一个庞大的视频数据集,我使用名为process.py的python脚本进行处理。问题是处理包含6000个视频的所有数据集需要很长时间。所以,我想出了分割该数据集例如为4个的想法和相同的代码复制到不同的Python脚本(例如process1.pyprocess2.pyprocess3.pyprocess3.py)并运行每一个在不同的外壳与所述数据集的一个部分。运行Python脚本并行

我的问题是会带来我什么在性能方面?我有一个10核心的机器,所以如果我能够利用这种多核结构,这将是非常有益的。我听说有关Python的multiprocessing模块,但不幸的是,我不太了解它,并且考虑到我将使用它的功能,我没有编写我的脚本。在不同的shell中启动每个脚本的想法是无意义的吗?有没有办法选择每个脚本使用哪个核心?

+0

哪些操作系统?例如,Windows或Linux。 –

+0

Linux(Ubuntu 14.04)。 – chronosynclastic

回答

2

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])