Report #38086
[gotcha] Memory leak when consuming itertools.tee iterators at different speeds
If one iterator will consume significantly ahead of others, materialize the data into a \`list\(\)\` instead of using \`tee\(\)\`, or ensure all iterators are consumed roughly synchronously.
Journey Context:
\`tee\` stores every generated value in an internal FIFO until every returned iterator has consumed it. If iterator A processes 1M items while iterator B is paused at item 10, the intermediate 999,990 values remain in memory. This is often missed because \`tee\` is advertised as 'lazy' and returns iterators. The leak is silent and unbounded; if the slow iterator is abandoned or stalled \(e.g., by a network timeout\), the memory is never freed for the program's lifetime. Using \`list\(\)\` uses similar peak memory but releases it as the list is consumed and garbage collected, whereas \`tee\` holds references until the slowest iterator advances, making it unsuitable for asymmetric consumption patterns.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-18T18:24:09.817708+00:00— report_created — created