我试图在python中运行并行进程,其中我必须根据某些条件从大型数组中提取某些多边形。大数组具有索引的10k +多边形。
在extract_polygon
函数中,我通过了(数组,索引)。基于索引,函数必须返回与该索引相对应的面,或者不基于定义的条件返回面。该数组从不更改,仅用于根据提供的索引读取多边形。
由于数组很大,因此在并行处理期间遇到内存不足错误。我该如何避免呢? (以某种方式,如何在多处理中有效使用共享数组?)
下面是我的示例代码:
def extract_polygon(array, index):
try:
islays = ndimage.find_objects(clone==index)
poly = clone[islays[0][0],islays[0][1]]
area = np.count_nonzero(ploy)
minArea = 100
maxArea = 10000
if (area > minArea) and (area < maxArea):
return poly
else:
return None
except:
return None
start = time.time()
pool = mp.Pool(10)
results = pool.starmap(get_objects,[(array, index) for index in indices])
pool.close()
pool.join()
#indices here is a list of all the indexes we have.
在这种情况下,我可以使用其他任何库,例如ray
吗?
答案 0 :(得分:0)
您绝对可以使用Ray之类的库。
结构看起来像这样(简化了您的应用程序逻辑)。
import numpy as np
import ray
ray.init()
# Create the array and store it in shared memory once.
array = np.ones(10**6)
array_id = ray.put(array)
@ray.remote
def extract_polygon(array, index):
# Change this to actual extract the polygon.
return index
# Start 10 tasks that each take in the ID of the array in shared memory.
# These tasks execute in parallel (assuming there are enough CPU resources).
result_ids = [extract_polygon.remote(array_id, i) for i in range(10)]
# Fetch the results.
results = ray.get(result_ids)
您可以在documentation中了解有关Ray的更多信息。
请参阅以下一些相关答案: