[Twisted-Python] Twisted, wxPython & PyPubSub
exarkun at twistedmatrix.com
exarkun at twistedmatrix.com
Thu Sep 10 08:03:27 MDT 2009
On 01:47 pm, gabriel.rossetti at arimaz.com wrote:
>exarkun at twistedmatrix.com wrote:
>>On 9 Sep, 07:12 am, gabriel.rossetti at arimaz.com wrote:
>>>exarkun at twistedmatrix.com wrote:
>>>>On 02:21 pm, gabriel.rossetti at arimaz.com wrote:
>>>>>Hello everyone,
>>>>>
>>>>>I am using wx with twisted and pubsub (not the on in wx but the
>>>>>independent one) to notify each one of what is going on. I was
>>>>>wondering
>>>>>if I should use reactor.callFromThread to call
>>>>>publisher.sendMessage
>>>>>or
>>>>>not? I haven't been doing that until now but I wondered if it was
>>>>>better to.
>>>>Use reactor.callFromThread if you have code running in a non-reactor
>>>>thread and you want it to initiate some action in the reactor
>>>>thread.
>>>>
>>>>So, if publisher.sendMessage is using Twisted APIs or otherwise
>>>>requires
>>>>that it be run only in the reactor thread, and you need to use it
>>>>from
>>>>a
>>>>non-reactor thread, then use reactor.callFromThread. Otherwise,
>>>>don't.
>>>>
>>>>Jean-Paul
>>>Would you consider the wxreactor like a non-reactor thread?
>>
>>I'm not sure what you mean. The "reactor thread" is the thread that
>>"reactor.run()" is called in. Even if you're using wxreactor.
>>>I haven't
>>>checked out the code behind PyPubSub, but it's basically the
>>>Observer-Pattern so when I call publisher.sendMessage(...) it
>>>iterates
>>>the "subscribers" (observers) and calls the functions they associated
>>>w/
>>>the subscription. Those functions are both in the twisted code and
>>>the
>>>wx code. The Twisted code sends messages nd the wx code brings-
>>>up/hides
>>>dialogs or frames. In the wxdemo it does :
>>>
>>># look, we can use twisted calls!
>>>reactor.callLater(2, self.twoSecondsPassed)
>>>
>>>but doesn't use reactor.callFromThread, but unless I'm wrong
>>>reactor.callLater does the same thing but deferred in time. I often
>>>see
>>>reactor.callLater(0, myFunc) being used.
>>
>>The wx demo doesn't do anything with threads, so it doesn't need to
>>use
>>callFromThread. So, if you're only doing things like what the wx demo
>>does, you probably don't need callFromThread either.
>>
>>callLater doesn't do the same thing as callFromThread. There might be
>>some vague similarities (really the only one is that neither one calls
>>the function you pass it right away), but they're for very different
>>things.
>>
>>Jean-Paul
>
>Ok, well, from looking into the twisted source, it looks like the wx
>main loop is run in a seperate thread
>(http://twistedmatrix.com/trac/browser/tags/releases/twisted-8.1.0/twisted/internet/wxreactor.py#L60).
That's an implementation detail. You've also misinterpreted it
slightly. The wx main loop is run in the same thread reactor.run() is
called in. The other thread is used for other things.
Jean-Paul
More information about the Twisted-Python
mailing list