Hi Steve, Steve Holden wrote: > 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. > I fully agree for the given example. Especcially time.sleep allows even sub second sleeps.
Out of curiousity though: Is there any way to perform a call(), that releases the GIL before calling the function? It would avoid writing a wrapper? bye N -- http://mail.python.org/mailman/listinfo/python-list