Python 中的多线程回归

Multithreading regressions in Python

我在 Python 中有一个项目需要针对许多其他变量进行回归。为了清晰起见,我使用的是 Jupyter Notebook,但如果更方便的话,我也愿意使用另一个 IDE。我的代码看起来像:

for a in dependent_variables:
    for b in independent_variables:
        regress a on b

我当前的数据集并不大,所以整个过程可能需要 30 秒,但我很快就会有一个更大的数据集,这将显着增加所需的时间。我很好奇这是不是适合并行化的情况。具体来说,如果我有一个双线程八核处理器(意味着总共有 16 个 CPU),是否可以 运行 同时处理每个进程将第一个变量之一与第二个变量之一进行回归,从而允许我一次完成八个这样的回归(如果我将一半的 CPU 分配给这个过程)?我对并行化不是很熟悉,我发现的大多数其他答案都讨论了单个函数调用的并行化,而不是同时执行多个类似函数。感谢您的帮助!

名义上,这是

import itertools
import multiprocessing as mp

def regress_me(vars):
    ind_var, dep_var = vars
    # your regression may be better than mine...
    result = "{} {}".format(ind_var, dep_var)
    return result

if __name__ == "__main__":
    with mp.Pool(8) as pool:
        analyse_this = list(itertools.product(independent_variables,
            dependent_variables))
        result = mp.map(regress_me, analyse_this)

很大程度上取决于 parent 和 child 之间传递的内容,以及您使用的是像 linux 这样的分叉系统还是像 windows 这样的生成系统。如果这些数据集是从磁盘中获取的,最好在 worker regress_me 中进行读取,而不是从 parent 中传递。您可以使用标准 python multiprocessing 库阅读相关内容。