并行/多处理运行大型python脚本

2024-09-28 19:26:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个大型python脚本(一个行数大于1500的经济模型),我想在几个cpu核上并行执行。到目前为止,我发现的所有多处理示例都是关于简单函数的,但不是整个脚本。你能告诉我怎么做吗? 谢谢!你知道吗

说明:该模型生成一个多变量的数据集作为输出。每个结果与其他模型运行随机不同。因此,我必须经常运行模型,直到达到某个偏差度量(比如50次)。模型的输入总是相同的,但输出却不同。你知道吗

编辑,明白了:

import os                                                                       
from multiprocessing import Pool                                                

n_cores = 4
n_iterations = 5                                 

def run_process(process):                                                             
    os.system('python myscript.py')                                       

if __name__ == '__main__':
    p = Pool(n_cores)
    p.map(run_process, range(n_iterations))

Tags: 数据函数run模型import脚本示例os
1条回答
网友
1楼 · 发布于 2024-09-28 19:26:30

如果你想使用一个工人池,我通常会做以下几点。你知道吗

import multiprocessing as mp


def MyFunctionInParallel(foo, bar, queue):
    res = foo + bar
    queue.put({res: res})
    return


if __name__ == '__main__':
    data = []
    info = {}
    num = 
    ManQueue = mp.Manager().Queue()
    with mp.Pool(processes=numProcs) as pool:
        pool.starmap(MyFunctionInParallel, [(data[v], info, ManQueue)
                                   for v in range(num)])
resultdict = {}
for i in range(num):
    resultdict.update(ManQueue.get())

更清楚地说,您的脚本将成为MyFunctionInParallel的主体。这意味着您需要稍微更改脚本,以便依赖于输入的变量(即每个模型)可以作为参数传递给MyFunctionInParallel。然后,根据您希望对每次运行得到的结果执行的操作,您可以使用上面所示的队列,也可以将结果写入文件中。如果您使用队列,这意味着您希望能够在并行执行结束时(即在同一脚本执行中)检索数据,我建议使用字典作为将结果存储在队列中的一种方式,因为它们对所包含的数据非常灵活。另一方面,如果你希望与其他用户/应用程序共享结果,我想把结果写在文件中会更好。为了产生有意义的输出,您必须小心所有工作人员的并发写入,但是为每个模型编写一个文件也可以。你知道吗

对于代码的主要部分,num是您将要运行的模型的数量,data和info是特定于(或不特定于)每个模型的一些参数,numProcs是您希望启动的进程的数量。对于starmap的调用,它基本上会将列表理解中的参数映射到MyFunctionInParallel的每个调用,从而允许每个执行都有不同的输入参数。你知道吗

相关问题 更多 >