簡體   English   中英

python 27-並行創建和運行另一個腳本的實例

[英]python 27 - Creating and running instances of another script in parallel

我正在嘗試構建一個多處理腳本,該腳本從MySQL表中檢索屬性字典,然后使用從MySQL表中檢索到的每個字典作為主腳本的每個實例的參數來並行運行主腳本的實例。 主腳本有一個稱為Queen_bee()的方法,該方法負責確保所有其他方法都具有正確的信息並以正確的順序執行。

我嘗試遍歷字典列表,以便使用多處理庫創建/運行主腳本的並行進程。 但是它們最終會連續運行,而不是同時運行:

from my_main_script import my_main_class as main
import multiprocessing as mp

def create_list_of_attribute_dicts():
    ...
    return list_of_dicts

for each_dict in list_of_dicts:
    instance = main(each_dict)
    p = mp.Process(target=instance.queen_bee(),args=(each_dict,))
    p.start()
    ...

我也嘗試過使用多處理庫的Pool.map()方法。 但是我無法弄清楚如何使用Pool.map()對每個字典一次實例化主腳本:

...
pool = mp.Pool()
jobs = pool.map(main.queen_bee(),list_of_dicts)

Pool.map方法似乎是使這些實例並行運行的最干凈,最pythonic的方法,但在這種情況下,我一直掛在執行此操作的正確方法上。 我知道上面的'jobs'變量將失敗,因為'main'尚未實例化。 但是,我無法弄清楚如何將每個dict作為參數傳遞給單獨的主類實例,然后使用map方法運行這些實例。 我願意嘗試其他方法。 在此先感謝您的幫助。

我想我舔了一下。 答案似乎已經使用游泳池的map函數調用工作器功能這是同樣的多腳本 然后,輔助函數實例化調用其自己的輔助函數(在這種情況下為“ queen_bee”)的主腳本。

從上面使用我的代碼示例:

from my_main_script import my_main_class as main
import multiprocessing as mp

def create_list_of_active_job_attribute_dicts():
    ...
    return active_jobs

def call_the_queen(individual_active_job):
    instance = main(individual_active_job)
    instance.queen_bee()

if __name__ == '__main__':
    pool = mp.Pool(processes = 4)
    pool.map(call_the_queen,active_jobs)
    pool.close()
    pool.join()

我不知道為什么這種方法行得通,而另一種卻沒有。 如果有人想發言和解釋,我將不勝感激。 感謝@coder的幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM