[Twisted-Python] locking threads when deferToThread is used

Jean-Paul Calderone exarkun at divmod.com
Wed Aug 8 06:31:36 EDT 2007


On Wed, 08 Aug 2007 09:56:16 +0200, Ladislav Andel <ladaan at iptel.org> 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?

Don't.  Don't share state between different threads.  If you need to mutate
state as a result of code which has run in a thread, do it in the reactor
thread based on the result of the Deferred returned by deferToThread.

Also, why do you need threads to send SIP messages?

>2) How will I put together all three results mentioned above in the global 
>list
>- is it by using function callLater ?

Don't use globals.  You can just put your state variables on an instance of
a class.  There's nothing unique to Twisted about this.  I'm not sure how
callLater would be involved.  callLater is for scheduling functions to run
based on timing events.

Jean-Paul




More information about the Twisted-Python mailing list