繁体   English   中英

如何对 Python 中的多个嵌套 for 循环使用多处理?

[英]How to use multiprocessing for multiple nested for loop in Python?

我有一个 class 有一堆函数来检查一个巨大的 dataframe ~33gb 的数据。 变量中的每个值都针对 dataframe(比如说 D 列)中的一列运行,然后将其附加到 dataframe 本身以供其他迭代计算该值。

无论如何, i 是针对 df.D 运行的,而 j 是针对 df.D 运行的,并且 i 的结果以此类推。 我想看看哪组数字将提供最好的 output。 下面是代码的外观片段。

program.py
class Test:
    def runTest():
       pass

    def run():
       runTest()
       bunch of if/else statements to check the data
       pd.to_csv to export the result

    def aa(int):
       calculation..

    def bb(int):
       do something

     ...

runTest.py
for i in range(10,25):
    for j in range(45,85):
        for k in range(6,16):
            for l in range(7,21):
                for m in range(65,75):
                    class hello(Test):
                        def runTest():
                            a = aa(i)
                            b = bb(j)
                            ...
                    
                    hello().run()

我已经尝试使用 itertools.product 列出该范围内的所有数字。 但我不知道如何在我的程序中提取这些值。 我希望它具有可扩展性,因为范围会更大,并且会添加更多参数来测试程序。

如何使用 dask 或 multiprocessing 运行这些嵌套的 for 循环,以最大限度地减少运行此任务的时间? 或任何其他建议将不胜感激。 另外,如果有更好的方法来导出结果。 请告诉我。

看来您正在进行某种网格搜索/参数探索。 在这种情况下,我会避免使用类和嵌套循环。

要设置所有参数的列表,您可以使用itertools.product ,例如:

from itertools import product

for i, j in product(range(10), range(20)):
# run calculations

要并行迭代多个参数值,我会使用delayed

import dask
from itertools import product

@dask.delayed
def try_calc(i,j,k):
    df = pd.read_csv(my_csv_file)
    # run calculations
    df.to_csv(results_file)

results = dask.compute([
    try_calc(i,j,k) for i,j,k in product(range(10), range(20), range(30))
])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM