On Wed, 22 Dec 2004 12:55:46 +0000, Alan Kennedy <[EMAIL PROTECTED]> wrote: > [Norbert] > > i am experimenting with threads and get puzzling results. > > Consider the following example: > > #-------------------- > > import threading, time > > > > def threadfunction(): > > ....print "threadfunction: entered" > > ....x = 10 > > ....while x < 40: > > ........time.sleep(1) # time unit is seconds > > ........print "threadfunction x=%d" % x > > ........x += 10 > > > > > > > > print "start" > > th = threading.Thread(target = threadfunction()) > > The problem is here ^^ > > You are *invoking* threadfunction, and passing its return value as the > target, rather than passing the function itself as the target. That's > why threadfunction's output appears in the output stream before the > thread has even started. > > Try this instead > > #----------------------------------------------- > > import threading, time > > def threadfunction(): > print "threadfunction: entered" > x = 10 > while x < 40: > time.sleep(1) # time unit is seconds > print "threadfunction x=%d" % x > x += 10 > > print "start" > th = threading.Thread(target = threadfunction) > th.start() > print "start completed" > > #------------------------------------------------ > > Which should output the expected > > > > start > threadfunction: entered > start completed > threadfunction x=10 > threadfunction x=20 > threadfunction x=30 > > regards, > > -- > alan kennedy > ------------------------------------------------------ > email alan: http://xhaus.com/contact/alan
nice chum ;) liked the way you explained. Clear and easy to understand.. why doesn't the keyboardInterrupt seem to work? I am working in IDLE and it doesn't seem to stop the thread ???!!?? output of above code in IDLE shell:---- threadfunction x=75 KeyboardInterrupt >>> threadfunction x=80 -- cheers, Ishwor Gurung -- http://mail.python.org/mailman/listinfo/python-list