在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)
,因此可以被中断吗?
答案 0 :(得分:1)
我找到了一个解决方法,需要一个线程,主要程序cooperates和线程。
让我们考虑一下这个程序:
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
可以适应其他关键资源(套接字)