On 4/7/2016 3:32 PM, Marko Rauhamaa wrote:
I use AVL trees to implement timers. You need to be able to insert
elements in a sorted order and remove them quickly.
Guido chose a different method to implement timers for asyncio. He
decided to never remove canceled timers.
In 3.5.1, asyncio.base_events.BaseEventLoop._run_once
has this code to remove cancelled timers when they become too numerous.
if (sched_count > _MIN_SCHEDULED_TIMER_HANDLES and
self._timer_cancelled_count / sched_count >
_MIN_CANCELLED_TIMER_HANDLES_FRACTION):
# Remove delayed calls that were cancelled if their number
# is too high
new_scheduled = []
for handle in self._scheduled:
if handle._cancelled:
handle._scheduled = False
else:
new_scheduled.append(handle)
heapq.heapify(new_scheduled)
self._scheduled = new_scheduled
self._timer_cancelled_count = 0
--
Terry Jan Reedy
--
https://mail.python.org/mailman/listinfo/python-list