chr*_*tic 4 python multithreading multiprocessing
我有大量的视频数据集,我使用称为的python脚本处理了这些视频process.py。问题是处理包含6000个视频的所有数据集需要花费大量时间。所以,我想出了这个分集例如到4的理念,相同的代码复制到不同的Python脚本(例如process1.py,process2.py,process3.py,process3.py)并运行在不同的炮弹每一个与数据集的一部分。
我的问题是,这会给我带来什么绩效吗?我有一台10核的机器,所以如果我能以某种方式利用这种多核结构,那将是非常有益的。我听说过multiprocessingPython的模块,但是不幸的是,我对Python的了解不多,考虑到我会使用它的功能,所以我没有编写脚本。在不同的shell中启动每个脚本的想法是胡说八道吗?有没有办法选择每个脚本将使用哪个内核?
该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)
Run Code Online (Sandbox Code Playgroud)
使用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])
Run Code Online (Sandbox Code Playgroud)