Python 在池辅助进程内使用time.time()时出现双重释放或损坏错误
我在运行一些基本测试以掌握Python中的pool时出错: “/usr/bin/python3.5”中的错误:双重释放或损坏(fasttop):0x0000000001adf380 具有完整内存错误堆栈,并以以下内容结束: 密钥错误:139961995958016 我正在运行以下代码:Python 在池辅助进程内使用time.time()时出现双重释放或损坏错误,python,python-multiprocessing,Python,Python Multiprocessing,我在运行一些基本测试以掌握Python中的pool时出错: “/usr/bin/python3.5”中的错误:双重释放或损坏(fasttop):0x0000000001adf380 具有完整内存错误堆栈,并以以下内容结束: 密钥错误:139961995958016 我正在运行以下代码: from multiprocessing import Pool import time def f(x,t): print(time.time() - t) time.sleep(2)
from multiprocessing import Pool
import time
def f(x,t):
print(time.time() - t)
time.sleep(2)
return x*x
if __name__ == '__main__':
with Pool(processes=2) as pool:
time_start = time.time()
l = [None]*4
for i in range(4):
l[i] = pool.apply_async(f, (10, time_start))
l[-1].get(timeout=5*2)
print(time.time()-time_start)
我真的不明白这里发生了什么。这与在f函数中使用time.time()有关,因为注释这一行可以解决问题,但除此之外,我不知所措
我正在运行Python 3.5.2(64位)。看来您在Python实现中发现了一个bug。这个错误通常是glibc在两次尝试
释放指针时抛出的,因此Python代码没有正确的理由这样做。如果这是由于我没有很好地使用多处理和时间模块造成的,那么这真的算是一个bug吗?问题是,我在python文档中找不到任何关于这个问题的警告,但我发现很难相信我是第一个遇到这个问题的人,因为这两个模块都是标准库。如果它是一个bug,那么解释器应该负责处理所有与指针相关的疯狂行为。这也可能与发行版编译解释器和依赖库的方式有关。