在 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)
从而可以被精细地中断?
我找到了一个解决方法,它需要线程并且主程序合作 https://stackoverflow.com/questions/323972/is-there-any-way-to-kill-a-thread-in-python与线程。
让我们考虑一下这个程序:
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
可以适应其他关键资源(套接字)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)