[Twisted-Python] locking threads when deferToThread is used
Jean-Paul Calderone
exarkun at divmod.com
Wed Aug 8 04:31:36 MDT 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