Below are 2 files that isolate the problem.  Note, both programs hang
(stop responding) with hyper-threading turned on (a BIOS setting), but
work as expected with hyper-threading turned off.

Note, the Windows task manager shows 2 CPUs on the Performance tab with
hyper-threading is turned on.

Both Python 2.3.5 and 2.4.3 (downloaded from python.org) have this
problem.
The operating system is MS Windows XP Professional.

winmsd.exe shows:
2CPUs: x86 Family 15 Model 4 Stepping 1 GenuineIntel ~3000 MHz
Version: 5.1.2600 Service Pack 2 Build 2600

Could someone with a hyper-threading (or dual/multicore) CPU please
confirm this bug?

Many Thanks

Olaf


# testsleep.py
import threading
import time

class Task(threading.Thread):
        def __init__(self, n, t):
                threading.Thread.__init__(self)
                self.n = n
                self.t = t
        def run(self):
                print 'thread %d started' % self.n
                print 'sleep time:', self.t
                print time.clock()
                print time.clock()
                print time.clock()
                print
                count = 0
                printCount = int(10 / self.t)
                while True:
                        start = time.clock()
                        time.sleep(self.t)
                        stop = time.clock()
                        if stop - start > 1.0:
                                print 'thread', self.n, stop - start

                        count += 1
                        if count > printCount:
                                count = 0
                                print self.n,

def test():
        thread1 = Task(1, 0.01)
        thread2 = Task(2, 0.003)
        thread1.start()
        thread2.start()

test()

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

# testsleep2.py
import thread
import time
import sys

def run(n, t):
        print 'thread %d started' % n
        print 'sleep time:', t
        print time.clock()
        print time.clock()
        print time.clock()
        print
        count = 0
        printCount = int(10 / t)
        while True:
                start = time.clock()
                time.sleep(t)
                stop = time.clock()
                if stop - start > 1.0:
                        print 'thread', n, stop - start

                count += 1
                if count > printCount:
                        count = 0
                        print n,

def test():
        thread.start_new_thread(run, (1, 0.01))
        thread.start_new_thread(run, (2, 0.003))

        # Wait until the user presses the enter key.
        sys.stdin.read(1)
        
        
test()

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to