2015-11-04 191 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])