libc Sleep api performs a busy waiting
Steve Holden
steve at holdenweb.com
Mon Mar 8 07:33:57 EST 2010
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/
More information about the Python-list
mailing list