据我在研究Python GIL时了解到的,只有一个线程可以被执行(谁持有锁定)。然而,如果这是真的,那么为什么这段代码只需要3秒就能执行完,而不是15秒?
import threading
import time
def worker():
"""thread worker function"""
time.sleep(3)
print 'Worker'
for i in range(5):
t = threading.Thread(target=worker)
t.start()
按照我的线程感觉,我本以为这需要 3 秒钟,事实也确实如此。但是在了解了 GIL (全局解释器锁)和一次只能执行一个线程后,现在我看着这段代码,就会想,为什么不需要 15 秒钟呢?
sleep()
确实会释放 GIL。此外,Python 强制在每个 N 毫秒或执行 M 条字节码指令后进行线程切换(取决于使用的 Python 版本)。 - martineau