25 _LOGGER = logging.getLogger(__name__)
29 for behavior
in behaviors:
33 _LOGGER.exception(
'Exception calling behavior "%r"!', behavior)
37 calling = threading.Thread(target=_call, args=(behaviors,))
52 collections.namedtuple(
'_Delta', (
54 'earliest_mature_time',
55 'earliest_immature_time',
62 earliest_mature_time =
None
63 while state.times_to_behaviors:
64 earliest_time =
min(state.times_to_behaviors)
65 if earliest_time <= now:
66 if earliest_mature_time
is None:
67 earliest_mature_time = earliest_time
68 earliest_mature_behaviors = state.times_to_behaviors.pop(
70 mature_behaviors.extend(earliest_mature_behaviors)
72 earliest_immature_time = earliest_time
75 earliest_immature_time =
None
76 return _Delta(mature_behaviors, earliest_mature_time,
77 earliest_immature_time)
89 with self.
_state.condition:
93 behaviors_at_time = self.
_state.times_to_behaviors.get(
95 if behaviors_at_time
is None:
99 if not behaviors_at_time:
101 self.
_state.condition.notify_all()
106 with self.
_state.condition:
110 raise NotImplementedError()
113 raise NotImplementedError()
116 raise NotImplementedError()
119 raise NotImplementedError()
122 raise NotImplementedError()
125 raise NotImplementedError()
137 with self.
_state.condition:
141 self.
_state.condition.notify_all()
142 if delta.mature_behaviors:
143 self.
_calling = delta.earliest_mature_time
146 if delta.earliest_immature_time
is None:
150 timeout =
max(0, delta.earliest_immature_time - now)
151 self.
_state.condition.wait(timeout=timeout)
152 _call(delta.mature_behaviors)
155 with self.
_state.condition:
156 while ((self.
_state.times_to_behaviors
and
157 min(self.
_state.times_to_behaviors) < time)
or
159 self.
_state.condition.wait()
162 with self.
_state.condition:
163 self.
_state.times_to_behaviors[time].append(behavior)
165 self.
_state.condition.notify_all()
167 activity = threading.Thread(target=self.
_activity)
176 return self.
_call_at(behavior, _time.time() + delay)
179 return self.
_call_at(behavior, time)
182 time = _time.time() + duration
183 _time.sleep(duration)
187 _time.sleep(
max(0, time - _time.time()))
204 with self.
_state.condition:
205 time = self.
_time + delay
206 self.
_state.times_to_behaviors[time].append(behavior)
210 with self.
_state.condition:
211 if time <= self.
_time:
214 self.
_state.times_to_behaviors[time].append(behavior)
219 with self.
_state.condition:
220 self.
_time += duration
225 with self.
_state.condition:
226 if self.
_time < time: