add counter to time_queue, kill gens with close()

pull/25/head
Jan Pochyla 8 years ago committed by Pavol Rusnak
parent 0f74597215
commit ef44e9ded8
No known key found for this signature in database
GPG Key ID: 91F3B339B9A02A3D

@ -17,6 +17,7 @@ event_handlers = {
MESSAGE: None, MESSAGE: None,
} }
time_queue = [] time_queue = []
schedule_ctr = 0
if __debug__: if __debug__:
# For performance stats # For performance stats
@ -27,16 +28,15 @@ if __debug__:
def __schedule(gen, args=(), time=None): def __schedule(gen, args=(), time=None):
if __debug__: global schedule_ctr
log.debug(__name__, 'Scheduling %s %s', time, gen)
if not time: if not time:
time = utime.ticks_us() time = utime.ticks_us()
heappush(time_queue, (time, schedule_ctr, gen, args))
heappush(time_queue, (time, gen, args)) schedule_ctr += 1
class Wait(): class Wait():
def __init__(self, gens, wait_for=1, exit_others=True): def __init__(self, gens, wait_for=1, exit_others=True):
self.wait_for = wait_for self.wait_for = wait_for
self.exit_others = exit_others self.exit_others = exit_others
@ -64,10 +64,8 @@ class Wait():
if self.exit_others: if self.exit_others:
for g in self.gens: for g in self.gens:
try: if isinstance(gen, type_gen):
g.throw(StopIteration()) g.close()
except:
pass
def sleep(us): def sleep(us):
@ -88,7 +86,7 @@ def run_forever(start_gens):
while True: while True:
if time_queue: if time_queue:
t, _, _ = time_queue[0] t, _, _, _ = time_queue[0]
delay = t - utime.ticks_us() delay = t - utime.ticks_us()
else: else:
delay = delay_max delay = delay_max
@ -112,7 +110,7 @@ def run_forever(start_gens):
else: else:
if time_queue: if time_queue:
# Run something from the time queue # Run something from the time queue
_, gen, args = heappop(time_queue) _, _, gen, args = heappop(time_queue)
else: else:
# Sleep again # Sleep again
delay = delay_max delay = delay_max

Loading…
Cancel
Save