In primo luogo, nulla nel official documentation on itertools dice che sono thread-safe. Quindi sembra che la specifica Python non garantisca nulla a riguardo. Questo potrebbe essere diverso tra implementazioni come Jython o PyPy, ma questo significa che il tuo codice probabilmente non sarà portatile.
In secondo luogo, la maggior parte itertools
(con l'eccezione di quelli semplici, come count
) accettano altri iteratori come input. Avresti bisogno che questi iteratori si comportino correttamente anche in modalità thread-safe.
In terzo luogo, alcuni iteratori potrebbero non avere senso se utilizzati contemporaneamente da thread diversi. Ad esempio, izip
che lavora in più thread potrebbe entrare in condizioni di competizione prendendo elementi da più fonti, specialmente come definito da un codice python equivalente (cosa succederà quando un thread riuscirà a prendere valore da un solo iteratore di input, quindi il secondo thread da due di essi ?).
Si noti inoltre che la documentazione non dice che itertools
sono implementate in C. Sappiamo (come un dettaglio di implementazione), che di CPython itertools
sono effettivamente scritti in C, ma su altre implementazioni che possono tranquillamente essere implementate come generatori, e si può tornare allo question you cited.
Quindi, no, non si può presumere che siano thread-safe a meno che non si conoscano i dettagli di implementazione della piattaforma Python di destinazione.