[PEAK] problem with peak.io_events
Vladimir Iliev
vlado at vintech.bg
Tue Sep 14 04:29:41 EDT 2004
Phillip J. Eby wrote:
> At 06:50 PM 9/13/04 +0300, Vladimir Iliev wrote:
>
>> Phillip J. Eby wrote:
>>
>>> What OS are you using?
>>
>> I tried on both Fedora Core 1 (python 2.3.4) and Gentoo (python 2.3.4).
>
>
> Hm. On Python 2.3.3 and Red Hat 6.2, it works with or without the
> itertools import. On Python 2.2.3, I can't get it to work at all,
> unless I fix another bug in your script, that I didn't notice previously.
>
> 'ss.signals()' returns an event object that is only valid for as long
> as a reference to it is held. The routine that calls it discards the
> reference when it returns, so perhaps you're seeing some sort of GC
> irregularity when you import itertools. (There was a change to how GC
> at shutdown works in Python 2.3.4.) The following code works for me:
>
> class Comp(binding.Component):
>
> def _setup(self):
> def cb(*a): print 'bzzzzzzzzzzzzz'
> ss = self.lookupComponent(ISignalSource)
> ev = ss.signals(*tuple(signals))
> ev.addCallback(cb)
> MyTask(self, runEvery=1)
> return ev # save a reference to the event object
> _setup = binding.Make(_setup, uponAssembly=True)
>
>
> I'm considering changing this aspect of certain peak.events, so that
> they remain valid whenever they have callbacks, rather than requiring
> a reference to be held at all times. But it may be a while before I
> can get to that. In the meantime, whenever you request dynamic I/O
> events like 'readable()' or 'signals()', you should hold onto the
> event for as long as you'd like to receive callbacks.
>
> _______________________________________________
> PEAK mailing list
> PEAK at eby-sarna.com
> http://www.eby-sarna.com/mailman/listinfo/peak
Now it works. Thanks!
More information about the PEAK
mailing list