code: def process(self, sched, coro):
          
          super(Signal, self).process(sched, coro)
          self.result = len(sched.sigwait[self.name])
          if self.result < self.recipients:
              sched.signals[self.name] = self
              self.coro = coro
              return
  
          for waitop, waitcoro in sched.sigwait[self.name]:
              waitop.result = self.value
          if self.prio & priority.OP:
              sched.active.extendleft(sched.sigwait[self.name])
          else:
              sched.active.extend(sched.sigwait[self.name])
  
          if self.prio & priority.CORO:
              sched.active.appendleft((None, coro))
          else:
              sched.active.append((None, coro))
  
          del sched.sigwait[self.name]
docs: If there aren't enough coroutines waiting for the signal as the
          recipicient param add the calling coro in another queue to be activated
          later, otherwise activate the waiting coroutines.