Почему я не могу вырваться из этого бесконечного цикла itertools?

В REPL мы обычно прерываем бесконечный цикл с помощью сиг- нана, т.е. ctrl + c, и восстанавливаем управление в интерпретаторе.

>>> while True: pass
... 
^CTraceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyboardInterrupt
>>>

Но в этом цикле прерывание, кажется, заблокировано, и я должен убить родительский процесс для выхода.

>>> *x, = itertools.repeat('x')
^C^C^C^C^C^C^C^C^\^\^\^\^\^Z^Z^Z^Z

Почему это?

Ответ 1

KeyboardInterrupt проверяется после каждой инструкции Python. itertools.repeat и генерация кортежа обрабатывается в коде C. После этого прерывание обрабатывается, т.е. Никогда.