不能中断lock.acquire(),而我可以中断time.sleep()

在Windows中,Python 3.4

import threading l = threading.Lock() l.acquire() l.acquire() 

触发死锁,并且CTRL + C无法停止它。 你必须杀死这个过程。

另一方面:

 import time time.sleep(100000) 

可以随时用CTRL + C中断(我已经读过其他一些SO问题/答案,但它工作正常)

两个都依靠OS系统调用,所以为什么它不适用于锁,它正在sleep ? 是因为time.sleep(1000000)是(大致)等于for i in range(10000000): time.sleep(0.1) ,因此可以很好地中断吗?

Solutions Collecting From Web of "不能中断lock.acquire(),而我可以中断time.sleep()"

我找到了一个解决方法,它需要一个线程,主程序与线程协作 。

我们来考虑一下这个程序:

 import threading l = threading.Lock() l.acquire() l.acquire() 

该程序阻止并不能被CTRL + C中断。 你必须杀死这个过程。

现在,我创建一个使用线程锁执行阻塞调用的线程。 当按下CTRL + C时,我中断程序并释放锁定。

除了与之合作之外,没有办法杀死线程,所以你必须知道线程在做:

 import threading import time,sys l = threading.Lock() def run(): global l l.acquire() l.acquire() t = threading.Thread(target=run) t.start() while True: try: time.sleep(1) except KeyboardInterrupt: print("quitting") l.release() break 

可以适应其他关键资源(套接字)