[Twisted-Python] twisted threads: synchronous function calls
Markus Schiltknecht
markus at bluegap.ch
Tue Jun 20 07:52:28 MDT 2006
Hi,
I had to use a thread... that thread must also call a function in the
twisted reactor thread. No problem, I thought, looked up in the fine
manual and found the reactor.callFromThread(somefunc, someargs...).
Wonderful, so in my separate thread I wrote:
x = reactor.callFromThread(myfunc, myargs...)
..but...
callFromThread returns before myfunc finishes. It seems to be useful for
async function calls, but not for my case.
I ended up writing something like:
def syncCall():
waitCond = threading.Condition()
waitCond.result = 0
def _process(cond):
cond.acquire()
cond.result = ..some function call..
cond.notify()
cond.release()
waitCond.acquire()
reactor.callFromThread(_process, waitCond)
waitCond.wait()
waitCond.release()
return waitCond.result
Now, I might have missed something, but that's sure functionality which
Twisted should provide.
In my first attempt I let the function return a Defer. I expected the
reactor to 'send back' the result to the calling thread only after the
Defer.callback() was called. IMHO that would be the most elegant and
intuitively way:
def myfunc(myarg):
Defer d
reactor.callLater(10, d.callback)
return d
# from the separate thread one would write:
reactor.callFromThreadSync(myfunc, args)
Am I facing problems I'm not aware of? Did I miss something?
Regards
Markus
More information about the Twisted-Python
mailing list