0

我正在对包含 5500 万行的数据集进行数据分析。具体来说,我正在计算地球上两点之间的总距离,这是一个球体,给定它们的经纬度坐标。我用来计算这个距离的公式是半正弦公式。我正在使用 numpy python 库对每组点执行半正弦计算。

考虑到我的数据集的大小,充分利用我的处理器拥有的所有 4 个线程将是非常有益的。所以,我使用下面的代码片段来分配我的 Pandas 数据帧的切片(我使用的数据结构存储有问题的两个点的纬度和经度值)并将每个线程分配给一个辅助函数来处理每个片:

CHUNK_AMOUNT = 4  #set this value to the number of threads you can afford to use
ind = 0 #start index of each slice, and set is the pandas dataframe
for i in range(CHUNK_AMOUNT):
    chunk = set[ind:int((i+1)*(set.shape[0]/CHUNK_AMOUNT))]
    t = threading.Thread(target=calculate_abs_displacement, args=(chunk, i))
    #calculate_abs_displacement is the implementation of the haversine distance  
    t.setDaemon(True)
    t.start()
    ind = int((i+1)*(set.shape[0]/CHUNK_AMOUNT))

但是,当我运行我的代码时,我收到以下错误:分段错误(核心转储)。为了便于参考,我在具有四核 Intel Core i5-2400 CPU 的本地机器(不是 VM)上运行 Ubuntu 16.04 LTS。

仅供参考,当我在终端中运行“top”命令时,我发现只有一个核心处于 100%,而其余核心的利用率为 0%。然后,在控制台中显示错误消息后,所有 CPU 内核的使用率都为 0%。这种不稳定行为的原因是什么?

4

0 回答 0