Re: issues with Trellis event loops and threads

"Phillip J. Eby" <pje-Wh6+Hckhi6HFNGf7iClzIwC/[email protected]>
Newsgroups gmane.comp.python.peak
Message-ID <[email protected]>
At 04:39 AM 7/21/2008 +0300, Sergey Schetinin wrote:
>There's a problem with using the trellis and activity module in a
>multithreaded app. There's a main loop thread with activity.EventLoop
>running and there's a rule that runs periodically by rescheduling
>itself (in my case it calls wx.ProgressBar.Pulse(), just to give you
>an example of why this could be a legitimate use). There's also a
>worker thread that initiates this process, but due to EventLoop and
>Time being context.Service this doesn't work as expected -- the
>dependency on _Timer instance (Time[0.1] for example) created from a
>worker thread doesn't schedule a recalculation.
>
>See test in attached file -- it should't hang up, but it does as
>do_update rule only runs once.
>
>I tried to fix it by restoring state from the main thread in the
>worker thread but it's rather non-trivial as the State instances seem
>to rely on a threadlocal data. If there's a proper way to do it, I'd
>be happy to learn what it is. Thanks a lot in advance.

The Trellis does not support inter-thread communication at this time; 
each thread's cells must be 100% isolated from other threads, and 
each thread needs its own, isolated EventLoop.  You can, of course, 
make a special eventloop class that communicates with a main 
eventloop, if you need to.  But you'd need to do it using a 
Queue.Queue or some other safe inter-thread communication mechanism.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.