Python Glossary English

Python 3.15+threadingфункция

threading.synchronized_iterator()

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

Декоратор для генераторной функции: каждый возвращаемый ею итератор сразу обёрнут в serialize_iterator и безопасен для нескольких потоков.

Синтаксис

@threading.synchronized_iterator
def gen(...):
    yield ...

Удобнее, чем оборачивать каждый вызов вручную: @threading.synchronized_iterator над def squares(n) — и любой squares(10) можно раздавать потокам. Имя, документация и __wrapped__ исходной функции сохраняются. Блокировка своя у каждого итератора, а не общая на функцию: два вызова генератора не мешают друг другу. Каждый элемент получает ровно один поток — это очередь работы, а не рассылка.

Примеры

import threading
@threading.synchronized_iterator
def squares(n):
    for x in range(n):
        yield x * x
print(squares.__name__)  # → squares
got = []
it = squares(50)
threads = [threading.Thread(target=lambda: got.extend(it)) for _ in range(3)]
for t in threads: t.start()
for t in threads: t.join()
print(sorted(got) == [x * x for x in range(50)])  # → True

См. также

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