为助手函数分配守护进程线程时发生分段错误

2024-06-16 14:22:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在对一个拥有5500万行的数据集进行数据分析。具体来说,我计算的是地球上两点之间的总距离,这是一个球体,给定它们的纬度和经度坐标。我用来计算这个距离的公式是哈弗森公式。我使用numpython库对每一组点执行haversine计算。你知道吗

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

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))

然而,当我运行我的代码时,我得到以下错误:分段错误(core转储)。为了便于参考,我在一台本地机器(不是虚拟机)上运行ubuntu16.04 LTS,该机器采用四核Intel core i5-2400 CPU。你知道吗

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


Tags: ofthe数据代码距离错误线程amount