Hacker Newsnew | comments | show | ask | jobs | submitlogin

I was under the impression that time.sleep'ing all over the place was the only way to let threads do their work in python because that's one of the few ways to release the GIL. Is there some other way to get this done (that doesn't involve C modules)?



Instead, use a "message reply" concept. For example, for your data you could send a tuple with a callback or a condition.

Then block on the condition, and have the lambda/delegate in the idle thread signal the condition. Make sure you hold the lock for the conditions mutex before sending the message though so that it is not a race condition.

#Sender

callback = SomeFunc

mutex.lock()

def worker():

    # ran in main

    callback()

    mutex.lock()

    cond.signal()

    mutex.unlock()
send_msg_to_idle(0, worker)

cond.wait()

mutex.unlock()

-----


gtk.threads_enter()

try:

   blah
finally:

   gtk.threads_leave()
or even better and wrap that as a context manager so you do

with gtk_lock():

   blah

-----




Applications are open for YC Summer 2015

Guidelines | FAQ | Support | Lists | Bookmarklet | DMCA | Y Combinator | Apply | Contact

Search: