Mahesh wrote: > Hi, > > I am having a problem while using sleep function from libc , the > thread in which i am calling it is getting struck and not allowing > other threads to execute. Here is a simple code that i am trying to > exeute > > import threading > import time > import dl > > > def dummy1(): > a=dl.open('/lib/libc.so.6') > print "in thread 1 Start" > a.call('sleep',2) > #time.sleep(2) > print "in thread 1 End" > > def dummy2(): > print "in thread 2 Start" > time.sleep(1) > print "in thread 2 End" > newThread1=threading.Thread(None,dummy1) > newThread2=threading.Thread(None,dummy2) > newThread1.start() > newThread2.start() > > print "in main" > > > > The out put of this program is (In this case thread 1 even though i > am calling a sleep function its not allowing other threads to execute, > other threads execute only after the completion of first thread) > > in thread 1 Start > in thread 1 End > in thread 2 Start > in main > in thread 2 End > > > where as if i use time.sleep instead of a.call(sleep) the out put is > (which i guess is right behaviour, because it start the threads and > suspends them because the have sleep , and continue executing the main > thread) > in thread 1 Start > in thread 2 Start > in main > in thread 2 End > in thread 1 End > > Why not just use the time module's sleep function? Unlike the libc code it releases Python's GIL (global interpreter lock), thus allowing other threads to run.
regards Steve -- Steve Holden +1 571 484 6266 +1 800 494 3119 PyCon is coming! Atlanta, Feb 2010 http://us.pycon.org/ Holden Web LLC http://www.holdenweb.com/ UPCOMING EVENTS: http://holdenweb.eventbrite.com/ -- http://mail.python.org/mailman/listinfo/python-list