[PEAK] issues with Trellis event loops and threads

Phillip J. Eby pje at telecommunity.com
Mon Jul 21 10:21:48 EDT 2008

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.

More information about the PEAK mailing list