我试图用Cython的prange来提高一些度量计算的性能。这是我的代码: def shausdorff(float64_t[:,::1] XA not None, float64_t[:,:,::1] XB not None):
cdef:
Py_ssize_t i
Py_ssize_t n = XB.shape[2]
float64_t[::1]
时间采取的顺序代码(seq.py) import time
def countDown(n):
while n > 0:
n -= 1
n = 50000000
start = time.time()
countDown(n)
end = time.time()
print(end-start)
是, $ python3.6 seq.py
4.20971
我读通过Grok The GIL,它有大约锁定在讨论下面的语句。 只要当它睡觉没有线程持有锁,并I/O,或其他一些GIL-下垂动作,你应该使用最粗,最简单的锁定成为可能。无论如何,其他线程无法并行运行。 它刚刚讨论了抢先式多任务处理。什么能防止在你锁定时发生GIL的抢先丢弃?或者这不是这个陈述所指的?
Thread State and the Global Interpreter Lock: 锁也被释放围绕潜在阻塞I/O操作,例如读取或写入一个文件,使其他的Python线程可以同时运行。 一个相关答案here通过@Alex马尔泰利说: 所有Python的阻塞I/O原语的释放GIL在等待I/O模块来解决 - 这是这么简单!在继续执行Python代码之前,他们当然需要再次获取GIL,但是对于机器周期