no puedo interrumpir lock.acquire () mientras que puedo interrumpir time.sleep ()

En ventanas, Python 3.4.

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

activa un interlocking y CTRL + C no puede detenerlo. Tienes que matar el proceso.

Por otra parte:

 import time time.sleep(100000) 

se puede interrumpir en cualquier momento con CTRL + C (he leído lo contrario en otras preguntas / respuestas SO, pero funciona bien)

Ambos confían en las llamadas del sistema operativo, ¿por qué no funciona para los lockings y para el sleep ? ¿Es porque time.sleep(1000000) es (aproximadamente) equivalente a for i in range(10000000): time.sleep(0.1) y por lo tanto puede interrumpirse finamente?

He encontrado una solución que requiere un subproceso y que el progtwig principal coopera con el subproceso.

Consideremos este progtwig:

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

Ese progtwig bloquea y no puede ser interrumpido por un CTRL + C. Tienes que matar el proceso.

Ahora, estoy creando un hilo que realiza la llamada de locking utilizando un locking de hilo. Cuando se presiona CTRL + C, interrumpo el progtwig y libero el locking.

No hay forma de matar el hilo que no sea cooperar con él, así que debes saber que el hilo está funcionando:

 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 

que puede adaptarse a otros recursos críticos (sockets)