在 Windows 中,Python 3.4
import threading
l = threading.Lock()
l.acquire()
l.acquire()
触发死锁,并且 CTRL+C 无法阻止它。您必须终止该进程。
另一方面:
import time
time.sleep(100000)
可以随时使用 CTRL+C 中断(我已经阅读过其他一些 SO 问题/答案,但效果很好)
两者都依赖于操作系统系统调用,那么为什么它不能用于锁而可以用于 sleep ?是因为 time.sleep(1000000)
(大致)相当于 for i in range(10000000): time.sleep(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
可以适应其他关键资源(套接字)
关于python - 无法中断 lock.acquire() 而我可以中断 time.sleep(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39545612/