multiprocessing.Pool() 的酸洗问题

问题描述 投票:0回答:1

我正在尝试多处理一个 python 函数,该函数在示意图区域中搜索某些 Minecraft 块。

区域对象初始化如下:

file = load_file_via_gui()
schem = Schematic.load(file)
region = list(schem.regions.values())[0]

为了在多个进程之间划分工作,我首先创建一个名为

SubRegion
的自定义对象列表。每个子区域代表在 Minecraft 中定义一个长方体所需的 6 个坐标。

要获取与每个 (x, y, z) 坐标关联的数据,该区域有一个名为

getblock(x, y, z)
的方法,它将返回与该位置关联的块。为了找到我要找的方块,我写了一个
find_blocks()
方法,给定一个
SubRegion
,一个要搜索的方块列表,理论上是一个区域的引用,以便调用
getblock()
每个坐标。

当我运行以下代码时,一切正常。

for i in range(len(sub_regions)):
    find_unmovable_blocks(sub_regions[i], black_listed_blocks, region, shared_list)

然而,由于大面积的迭代可能需要很多分钟,我想通过多处理来加快速度。

with multiprocessing.Pool(processes=num_cores) as pool:
    for i in range(len(sub_regions)):
        pool.apply_async(find_unmovable_blocks, args=(sub_regions[i], black_listed_blocks, region, shared_list))

代码编译运行,但多进程什么都不做。我试过调试和使用

print()
但它甚至没有进入函数内部。

我也试过使

region
成为全球性的,但这也没有用。

python multiprocessing pickle
1个回答
0
投票

问题已解决。此处提供代码:https://github.com/sweetbaboo-1/BlockFinder

© www.soinside.com 2019 - 2024. All rights reserved.