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.