python - 如何在 for 循环中使用多重处理?如何让一个核心运行从索引n1到n2的循环,另一个核心从索引n2到n3运行循环?

标签 python for-loop multiprocessing healpy

我编写了一段代码,将 2D 高斯的值分配给空 HEALPix 数组。为此,我在像素索引中创建了一个“for”循环。但代码似乎需要花费很多时间才能给出输出。有人可以帮我把这个循环分成几个部分,以便同时处理它们吗?以下是我想要多处理的代码部分。

def fn(nside):
    bar = ProgressBar(maxval = npix)
    bar.start()
    for i in range(0,npix):
        bar.update(i)
        for j in range(0,npix):
            hpxmap0[hp.ang2pix(nside, ma_theta[i], ma_phi[j])] = gaussian_2D(np.pi*(0.5) - ma_theta[i], ma_phi[j])
    bar.finish()
    return hpxmap0

最佳答案

编写一个包装函数来在给定的像素范围内运行循环:

def fn_dist(nside, i_lo, i_hi, j_lo, j_hi):
    ...
    for i in range(i_lo, i_hi):
        for j in range(j_lo, j_hi):
            ...

现在,您需要在所需的范围内 fork 进程,将矩阵划分为 i_stepj_step 的切片:

for i_lo in range(0, npix, i_step):
    for j_lo in range(0, npix, j_step):
        # spawn a process for fn(nside, i_lo, i_lo+i_step, j_lo, j_lo+j_step)

还要寻找执行 block 操作的方法。您可以编写自己的 gaussian_2D 函数版本来返回给定范围内的值矩阵吗?我强烈怀疑您目前的大部分时间都浪费在单值函数调用的开销上,而不是数据传输上。

关于python - 如何在 for 循环中使用多重处理?如何让一个核心运行从索引n1到n2的循环,另一个核心从索引n2到n3运行循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57728664/

相关文章:

c++ - 如何使用可变终点迭代基于范围的 for 循环

python - 如何使用多处理for循环?

python - 如何将多处理与多线程一起使用?

Python 处理系统关闭

python - Gevent 处于不受支持或无效的轮子中

python - Requests/lxml 脚本仅在终端中工作,但在 IDLE 或 PythonAnywhere 中未检索到任何数据?什么可能导致这种情况?

python - 如何使用pip在不同版本的python中安装lxml?

c - 重复添加列表中的数字?

python - 如何在pygame中绘制图像和 Sprite ?

c++ - 如何制作 ' i ' vector