【问题标题】:How to use multiprocessing for nested for-loop with multiple parameters in python [duplicate]如何在python中对具有多个参数的嵌套for循环使用多处理[重复]
【发布时间】:2019-05-11 14:37:55
【问题描述】:

我有一个名为“mj_flt”的大熊猫数据框,我想根据数据框中的某些列做一些事情,并将结果附加到一个空列表中。由于Dataframe太大,我需要使用for循环来批量处理Dataframe。我试图并行化的代码如下:

start = np.array(np.arange(0,6900000,300000))
end = np.array(np.arange(300000,7200000,300000))
tim = []
for (i,j) in zip(start,end):
    for index, row in mj_flt[i:j].iterrows():
        ## do some stuff with row['a'],row['b'],row['c'],row['d']
        ## get a result based on the operation
        tim.append(result)

如何使用 Multiprocessing 模块和 Pool 函数使嵌套的 for 循环并行化?

非常感谢!

【问题讨论】:

    标签: python for-loop parallel-processing multiprocessing python-multiprocessing


    【解决方案1】:

    您必须做一些事情才能使其按预期工作。线程池是一个等待线程池,等待一个函数和一个参数来执行。它通常还有一个包含 N 个元素(可调整)的候补名单来堆叠即将到来的工作。对于您正在执行的任务,您必须使用与处理器内核一样多的线程。更多不会加快工作速度。

    现在开始代码:您需要一个函数,该函数带有一个参数,该参数应包含该函数工作所需的所有数据。根据您操作数据的方式,您还需要使用一些锁定系统,无论是互斥锁、信号量等。

    在进入你的 for 循环之前,线程池应该分配有 cpu_cores 线程和一个等待列表,只要你想传递给它的函数的最大数量,或者 add_work_to_thread_pool 系统应该阻塞,直到一些空间被腾出线程完成他们的工作。

    在 for 循环中,您将函数(参数)添加到等待列表中。等待列表将被allocated_threads一次消耗。

    在 for 循环之后,您必须等待每个线程都处于等待状态,并且等待列表为空,以确保所有工作都已完成。

    借助 python 线程和等待列表手册以及一些谷歌,我认为您现在可以自己编写代码了。

    否则,请随时要求对特定点进行一些澄清,然后返回您尝试执行但未按预期工作的代码。我的意思是带线程的代码。不仅仅是您粘贴的 sn-p。

    玩得开心,多任务处理很有趣 :-)

    【讨论】:

      猜你喜欢
      • 2021-05-25
      • 2016-11-01
      • 2018-06-15
      • 1970-01-01
      • 1970-01-01
      • 2013-06-11
      • 2022-12-04
      • 2021-04-13
      • 2021-08-07
      相关资源
      最近更新 更多