【发布时间】:2021-09-20 12:53:38
【问题描述】:
使用以前的答案 (merci Booboo), 代码思路是:
from multiprocessing import Pool
def worker_1(x, y, z):
...
t = zip(list_of_Polygon,list_of_Point,column_Point)
return t
def collected_result(t):
x, y, z = t # unpack
save_shp("polys.shp",x)
save_shp("point.shp",y,z)
if __name__ == '__main__':
gg = gpd.read_file("name.shp")
pool = Pool()
for index, pol in gg.iterrows():
xlon ,ylat = gg.centroid
result = pool.starmap(worker_1, zip(pol,xlon,ylat))
# or
# result = mp.Process(worker_1,args = (pol,xlon,ylat))
pool.close()
pool.join()
collected_result(result)
但是地理数据框 (Polygon,Point) 是不可迭代的,所以我不能使用池,有什么并行化的建议吗?
如何压缩worker_1中的(geodataframe)输出然后独立保存(或shapefile中的多个层),使用全局参数更好? ...因为 zip 只保存列表(对*)?
【问题讨论】:
-
这个不清楚。首先你在
worker_1中有一个缩进问题,其次,如果你使用map,worker_1将收到一个参数。三、MultiPolygon是什么?这是一个对所有lat和lon值重复使用的对象吗?collected_result在这个问题上做了什么?MultiPolygon是某种集合吗?请用更正和解释更新您的问题。 -
告诉我
MultiPolygon是什么。请参阅我之前的评论。 -
@Booboo 理论上是进入多个shapefile,找到里面的多边形,然后在worker_1中做一些计算,输出为多边形和具有一定特征的点(在worker_1中计算)。理论上 collect_result 应该重新组合所有输出而不重复。例如一个 shapefile 有 1000 个多边形,每个多边形都去一个处理器进行计算并将它们保存在收集中
-
我想我的问题是,对于所有
x和y值,是否要将相同的MultiPolygon对象传递给worker_? -
不,这是一种说法,有很多输入多边形,但 shapefile 中的大多数多边形都不是多边形...所以 shapefile 中的每个多边形都经过 worker_1 我修改代码以使更清晰
标签: python parallel-processing geopandas pool shapely