Python Glossary English

Python 3.15+threadingфункция

threading.concurrent_tee()

итераторы в потоках

Делает из одного итератора n независимых копий, которые можно читать из разных потоков: каждая копия видит всю последовательность.

Синтаксис

threading.concurrent_tee(iterable, n=2)

Это потокобезопасный itertools.tee: обычный tee не рассчитан на одновременное чтение копий из разных потоков. Значения буферизуются, пока их не прочитают все копии, поэтому если одна копия сильно отстаёт, буфер растёт — память расходуется на разрыв между самым быстрым и самым медленным читателем. Каждую копию должен читать один поток; если одну копию делят несколько потоков, её дополнительно оборачивают в serialize_iterator. n=0 даёт пустой кортеж, отрицательное n — ValueError.

Примеры

import threading
left, right = threading.concurrent_tee(iter(range(5)))
results = {}
def read(name, it):
    results[name] = list(it)
threads = [threading.Thread(target=read, args=(n, it)) for n, it in [('L', left), ('R', right)]]
for t in threads: t.start()
for t in threads: t.join()
print(results['L'], results['R'])  # → [0, 1, 2, 3, 4] [0, 1, 2, 3, 4]

См. также

Частые ошибки

Открыть в полном глоссарииdocs.python.orgСообщить о неточности