- def add_wait_id(self, wait_id, action_or_wait):
- self.wait_ids[wait_id] = action_or_wait
-
- def interrupt_wait(self, wait_id):
- if wait_id in self.wait_ids:
- action_or_wait = self.wait_ids[wait_id]
- del(self.wait_ids[wait_id])
- if isinstance(action_or_wait, Action):
- action_or_wait.interrupt()
- else:
- action_or_wait.set()
+ def add_wait(self, action_or_wait, wait_id=None):
+ if wait_id is not None:
+ self.wait_ids[wait_id] = [action_or_wait]
+ else:
+ if None not in self.wait_ids:
+ self.wait_ids[None] = []
+ self.wait_ids[None].append(action_or_wait)
+
+ def interrupt_wait(self, wait_id=None):
+ if wait_id is None:
+ ids_to_interrupt = list(self.wait_ids.keys())
+ elif wait_id in self.wait_ids:
+ ids_to_interrupt = [wait_id]
+ else:
+ ids_to_interrupt = []
+
+ for _wait_id in ids_to_interrupt:
+ action_or_waits = self.wait_ids[_wait_id]
+ del(self.wait_ids[_wait_id])
+ for action_or_wait in action_or_waits:
+ if isinstance(action_or_wait, Action):
+ action_or_wait.interrupt()
+ else:
+ action_or_wait.set()