def search(self, line): if self.tasklet is None: self.reqchannel = Channel() self.queued = {} self.tasklet = Tasklet(self._checker) self.tasklet() ch = Channel() if line in self.queued: self.queued[line].append(ch) else: self.queued[line] = [ch] self.reqchannel.send(line) return ch.recv()