如何在python

时间:2019-05-11 14:37:55

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

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

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)

如何使用“多处理”模块和“池”功能使此嵌套的for循环并行化?

非常感谢!

1 个答案:

答案 0 :(得分:0)

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

现在有了代码:您将需要一个带有参数的函数,该参数应包含该函数正常工作所需的所有数据。根据您将如何操作数据,还需要使用一些锁定系统,无论是互斥锁,信号量还是其他。

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

在for循环中,您将function(parameter)添加到等待列表中。等待列表将一次被分配的线程消耗。

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

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

否则,请随时对某些要点进行澄清,然后返回您尝试执行的代码,但该代码无法正常工作。我的意思是带有线程的代码。不只是您粘贴的代码段。

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