【发布时间】:2016-08-16 02:53:36
【问题描述】:
我想在大型数据集上使用multiprocessing 来查找两个 gps 点之间的距离。我构建了一个测试集,但我无法让multiprocessing 处理这个集。
import pandas as pd
from geopy.distance import vincenty
from itertools import combinations
import multiprocessing as mp
df = pd.DataFrame({'ser_no': [1, 2, 3, 4, 5, 6, 7, 8, 9, 0],
'co_nm': ['aa', 'aa', 'aa', 'bb', 'bb', 'bb', 'bb', 'cc', 'cc', 'cc'],
'lat': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
'lon': [21, 22, 23, 24, 25, 26, 27, 28, 29, 30]})
def calc_dist(x):
return pd.DataFrame(
[ [grp,
df.loc[c[0]].ser_no,
df.loc[c[1]].ser_no,
vincenty(df.loc[c[0], x],
df.loc[c[1], x])
]
for grp,lst in df.groupby('co_nm').groups.items()
for c in combinations(lst, 2)
],
columns=['co_nm','machineA','machineB','distance'])
if __name__ == '__main__':
pool = mp.Pool(processes = (mp.cpu_count() - 1))
pool.map(calc_dist, ['lat','lon'])
pool.close()
pool.join()
发生此错误时,我在 Windows7 Professional 上使用 Python 2.7.11 和 Ipython 4.1.2 和 Anaconda 2.5.0 64 位。
runfile('C:/.../Desktop/multiprocessing test.py', wdir='C:/.../Desktop') Traceback(最近一次调用最后一次):
文件“”,第 1 行,在 runfile('C:/.../Desktop/multiprocessing test.py', wdir='C:/.../Desktop')
文件“C:...\Local\Continuum\Anaconda2\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py”,第 699 行,在运行文件中 execfile(文件名,命名空间)
文件“C:...\Local\Continuum\Anaconda2\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py”,第 74 行,在 execfile exec(compile(scripttext, filename, 'exec'), glob, loc)
文件“C:/..../multiprocessing test.py”,第 33 行,在 pool.map(calc_dist, ['lat','lon'])
文件“C:...\AppData\Local\Continuum\Anaconda2\lib\multiprocessing\pool.py”,第 251 行,在地图中 return self.map_async(func, iterable, chunksize).get()
文件“C:...\Local\Continuum\Anaconda2\lib\multiprocessing\pool.py”,第 567 行,在 get 提高self._value
TypeError: 无法从 1 创建 Point 实例。
def get(self, timeout=None):
self.wait(timeout)
if not self._ready:
raise TimeoutError
if self._success:
return self._value
else:
raise self._value
【问题讨论】:
-
通过您的最后一次编辑,它在我的机器上运行良好... Ubuntu 14.04,python2.7
-
错误出现在哪一行?
-
您能否在您的问题中也发布完整的堆栈跟踪?
-
我用 python3 试过了,现在我可以重现你的错误
-
@salomonderossi 我正在使用 iPython 4.1.2
标签: python pandas multiprocessing