繁体   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