[Python-bugs-list] [ python-Bugs-581232 ] [Windows] Can not interrupt time.sleep()

noreply@sourceforge.net noreply@sourceforge.net
Sun, 14 Jul 2002 16:09:42 -0700


Bugs item #581232, was opened at 2002-07-14 03:59
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=581232&group_id=5470

Category: Python Library
Group: Platform-specific
Status: Open
Resolution: None
Priority: 5
Submitted By: Mark Hammond (mhammond)
>Assigned to: Mark Hammond (mhammond)
Summary: [Windows] Can not interrupt time.sleep()

Initial Comment:
As nagged by Tim - time.sleep(10000) can not be
interrupted by Ctrl+C on Windows.  Attaching a patch to
fix this.

----------------------------------------------------------------------

>Comment By: Tim Peters (tim_one)
Date: 2002-07-14 19:09

Message:
Logged In: YES 
user_id=31435

This definitely makes time.sleep() interruptible on Win98, 
but I don't think it's quite there yet.  Playing with it by 
hand, one time I saw

IOError: [Errno 4] Interrupted function call

instead of KeyboardInterrupt when hitting Ctrl+C in an 
interactive shell.  The attached sleeper.py provokes lots of 
those by using threads (hit Ctrl+C within 10 seconds of 
starting it).

----------------------------------------------------------------------

Comment By: Mark Hammond (mhammond)
Date: 2002-07-14 10:46

Message:
Logged In: YES 
user_id=14198

... need uninterrupted sleep <wink>.  Please ignore the
Ctrl+Break comments - I had my bugs mixed up.  Rest is still
valid tho.

----------------------------------------------------------------------

Comment By: Mark Hammond (mhammond)
Date: 2002-07-14 10:38

Message:
Logged In: YES 
user_id=14198

Here we go - a better patch.  This delivers the exact same
multi-threaded semantics as my Linux build.

Re Ctrl+Break - no argument from me - my "if deemed broken"
was meant to imply that!  Win9x Ctrl+Break must be the same
as Win2k - I seemed to recall on Win9x it behaved like a
Ctrl+C.  No 9x even booted to check, and I don't really care
<wink>

FWIW, my test script:
import time, threading, thread

def sleeper():
    try:
        time.sleep(30)
    finally:
        msg = "Thread %d dieing" % (thread.get_ident(),)
        print msg

threads=[]
for i in range(2):
    t=threading.Thread(target=sleeper)
    t.start()
    threads.append(t)
print "sleeping"
try:
    time.sleep(30)
finally:
    print "waiting"
    [t.join for t in threads]
    print "final short sleep"
    time.sleep(2)


----------------------------------------------------------------------

Comment By: Mark Hammond (mhammond)
Date: 2002-07-14 04:05

Message:
Logged In: YES 
user_id=14198

Poo - not a thread-safe patch.  I will think about this some
more tomorrow.

----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=581232&group_id=5470