[PEAK] problem with peak.io_events
Phillip J. Eby
pje at telecommunity.com
Wed Sep 8 11:36:05 EDT 2004
At 04:54 PM 9/8/04 +0300, Vladimir Iliev wrote:
>class Comp(binding.Component):
>
> def _setup(self):
> def cb(*a): print 'cb:',a
> ss = self.lookupComponent(ISignalSource)
> ss.signals(tuple(signal_names)).addCallback(cb)
> MyTask(self, runEvery=1)
> _setup = binding.Make(_setup, uponAssembly=True)
This should say:
ss.signals(*tuple(signals)).addCallback(cb)
because 'signals()' takes signal *names* as positional arguments. You were
passing a tuple of signal *numbers* as a single argument.
(The 'signal_names' dictionary maps numbers to names; the 'signals'
dictionary maps names to numbers. Converting a dictionary to a tuple uses
the keys, so 'tuple(signal_names)' is a tuple of numbers, not names.)
The normal usage of the 'signals()' method is like this:
source = ss.signals('SIG_SOMETHING', 'SIG_OTHER_THING', ...)
i.e., I expected people to normally use a set of constant signals.
One drawback to the current implementation is that it doesn't care if you
give it unrecognized signal names, because it assumes those signals just
don't exist on the current platform. Thus, the tuple of signal numbers you
passed in was being looked up in 'signals' and not found, and thus
ignored. The event source returned was just a null event source that never
fires.
More information about the PEAK
mailing list