繁体   English   中英

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

[英]cannot interrupt lock.acquire() whereas I can interrupt 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 问题/答案,但效果很好)

两者都依赖于操作系统系统调用,那么为什么它不适用于锁而它适用于sleep呢? 是因为time.sleep(1000000) (大致)相当于for i in range(10000000): time.sleep(0.1) ,因此可以很好地中断?

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

让我们考虑这个程序:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM