On 8/8/07, Chris Mellon <[EMAIL PROTECTED]> wrote: > On 8/8/07, Ladislav Andel <[EMAIL PROTECTED]> wrote: > > Hi, > > I'm writing an application which will be periodically testing servers. > > I will have a global list of these servers(domain names) and need to do > > few tasks. > > 1) DNS checks - I will use asynchronous twisted-names for it > > - in case there is a difference comparing to the list it should update > > the list(then also in DB) > > 2) ICMP pings - should be also possible to do it asynchronously > > 3) Blocking function which will be pinging with SIP requests > > - here I will use function deferToThread to make it non-blocking. > > > > Questions: > > 1) How do I lock each thread when writing to a global list in twisted? > > 2) How will I put together all three results mentioned above in the > > global list > > - is it by using function callLater ? > > 3) Could you help me with a rough skeleton of this application, please? > > > > Thank you, > > Lada > > > > > deferToThread returns the result of the passed function in a Deferred. > Callbacks and errbacks will be run in the main event loop, so you > don't need to worry about thread safety of the callbacks, just of the > function itself. > > The basic model would look something like this: > > def querySIP(what): > return sip.query(what) #native, *threadsafe*, blocking call > > sipquery = reactor.deferToThread(querySIP, what) > sipquery.addCallback(lambda result: sip_results.append(result)) > sipquery.addErrback(log.err) >
And, of course, deferToThread is a function in the twisted.internet.threads module, not a method of the reactor. -- http://mail.python.org/mailman/listinfo/python-list