mirror of
https://github.com/rightup/pyMC_Repeater.git
synced 2026-05-04 12:42:16 +02:00
Problem 1 — _recent_drops: the list was evicted with pop(0), which is an O(n) memmove every time a drop is recorded. With maxlen=20 this is negligible today, but pop(0) on a list is always O(n) and the pattern is worth eliminating. Problem 2 — _known_neighbors cap: the eviction path did set(list(self._known_neighbors)[500:]) which first materialises the entire set as a list (O(n) allocation) before slicing. itertools.islice works directly on the set iterator and only allocates the 500 kept items, halving peak memory pressure during cleanup. Changes: * Import itertools (already absent from this file) * Import deque from collections alongside OrderedDict * self._recent_drops initialised as deque(maxlen=20); self._max_recent_drops removed (maxlen is the single source of truth) * Drop-recording block: rebuild deque from generator (preserves pubkey dedup filter) then append — automatic eviction replaces the explicit pop(0) guard * Known-neighbors cap: itertools.islice(self._known_neighbors, 500) replaces list(self._known_neighbors)[500:] Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>