【发布时间】:2021-09-28 17:05:21
【问题描述】:
我尝试使用多重处理将位置绘制到地图中,因为可能有很多位置可能需要一些时间,而且我经常不得不稍微调整一下想法,然后再试一次。
Traceback (most recent call last):
File "C:\Users\tbade\Documents\Studium\Master_thesis\Python\map.py", line 39, in <module>
pool.starmap(multiprocessing_func, zip(pop_lon, pop_lat))
File "C:\ProgramData\Anaconda3\envs\Python\lib\multiprocessing\pool.py", line 372, in starmap
return self._map_async(func, iterable, starmapstar, chunksize).get()
File "C:\ProgramData\Anaconda3\envs\Python\lib\multiprocessing\pool.py", line 771, in get
raise self._value
TypeError: 'float' object is not iterable
这是我收到的错误消息
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
import cartopy.feature as cf
import pandas as pd
import numpy as np
import multiprocessing
df = pd.read_csv('passport.csv')
pop_lat = df['latitude'].tolist()[:-2]
pop_lon = df['longitude'].tolist()[:-2]
central_lat, central_lon = np.median(pop_lat), np.median(pop_lon)
extent = [central_lon - 3, central_lon + 3.4, central_lat - 2.2, central_lat + 2]
ax = plt.axes(projection=ccrs.AlbersEqualArea(central_lon, central_lat))
ax.set_extent(extent)
ax.add_feature(cf.COASTLINE)
ax.add_feature(cf.BORDERS)
plt.show()
def multiprocessing_func(lon, lat):
for x, y in zip(lon, lat):
ax.plot(x, y, 'bo', markersize=1, transform=ccrs.Geodetic())
if __name__ == '__main__':
with multiprocessing.Pool() as pool:
pool.starmap(multiprocessing_func, zip(pop_lon, pop_lat))
我也得到了多个数字
提前致谢
【问题讨论】:
-
pop_lat和pop_lon似乎都是浮点数列表。这意味着 multiprocessing_func 的参数是两个浮点数,而不是两个浮点数列表。因此你的错误。目前尚不清楚您要通过多处理实现什么目标。 -
这个任务用 MRE 会更好(我们没有你的 passport.csv)。它也可能会让你更清楚发生了什么
-
我还应该补充一点,我不知道当您在不同线程中多次调用
plot时会发生什么。我不知道这是否受支持,以及您是否要获得多个地块或一个地块。我再说一遍,您要并行化其中的哪一部分。
标签: python multiprocessing cartopy