运行Python脚本并行

时间:2015-11-04 09:37:03

标签: python multithreading multiprocessing

我有一个巨大的视频数据集,我使用名为process.py的python脚本处理。问题是处理包含6000个视频的所有数据集需要花费大量时间。因此,我提出了将此数据集分成4个并将相同代码复制到不同Python脚本的想法(例如process1.pyprocess2.pyprocess3.pyprocess3.py并使用数据集的一部分在不同的shell上运行每个。

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

1 个答案:

答案 0 :(得分:5)

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