Обсуждение PyCon 2012 Дэвида Мерца о сопрограммах в качестве потоков - PullRequest
2 голосов
/ 05 ноября 2019

В этом выступлении Дэвида Мерца о сопрограммах, потоках и т. Д. Из PyCon 2012 он показывает пример использования сопрограмм (генераторов) в качестве замены для потоков:

Вотсодержание слайда:

Планировщик для невесомых нитей не будет переключаться в определенное место, но будет циклически изменяться или тому подобное:

def thread_scheduler(generators):
    thread_data = defaultdict(list)
    threads = [g() for g in generators()]
    while True:
        try:
            for t in threads:
                data = thread_data[t.__name__]
                consumer, data = t.send(data)
                thread_data[consumer].append(data)
        except StopIteration:
            break

В этом случае потребительские потоки не могут быть подключены напрямую, но после достижения получат введенные данные.

1) Является ли generators() опечаткой? Скорее всего generator список правильный? (Я знаю, что вы можете написать функцию, которая даст вам несколько итераций, в которых есть генераторы; но для простоты ...)

2) Почему код перехватывает только одну StopIeration ошибкукогда зацикливается столько генераторов?

...