Во-первых, в официальной документации itertools ничего не говорится о том, что они поточнобезопасны. Похоже, что по спецификации Python ничего не гарантирует по этому поводу. Это может отличаться в разных реализациях, таких как Jython или PyPy, но это означает, что ваш код, вероятно, не будет переносимым.
Во-вторых, большинство itertools
(за исключением простых, таких как count
) принимают другие итераторы в качестве входных данных. Вам понадобятся эти итераторы для правильного поведения в поточно-ориентированном режиме.
В-третьих, некоторые итераторы могут не иметь смысла при одновременном использовании разными потоками. Например, izip
, работающий в нескольких потоках, может попасть в состояние гонки, принимая элементы из нескольких источников, особенно в соответствии с определением эквивалентного кода Python (что произойдет, когда одному потоку удастся получить значение только из одного входного итератора, а затем второй поток из двух из них?).
Также обратите внимание, что в документации не упоминается, что itertools
реализованы на C. Мы знаем (как подробности реализации), что itertools
CPython фактически написаны на C, но в других реализациях они могут быть успешно реализованы как генераторы. и вы можете вернуться к вопросу, который вы цитировали .
Итак, нет, вы не можете предполагать, что они являются поточно-ориентированными, если не знаете подробностей реализации вашей целевой платформы python.