По крайней мере одна проблема в вашей функции invalidChar
. Это должно быть:
return !isprint( static_cast<unsigned char>( c ) );
Приведение функции char
в unsigned
может привести к очень большим, очень большим значениям, если char
отрицательно (UNIT_MAX+1 + c). Passing such a
value to
isprint` является неопределенным поведением .
В cpython потоки не выполняются параллельно, поэтому вы должны использовать процессы или асинхронные. Вы можете использовать библиотеку multiprocessing.pool
или concurrent.futures.ProcessPoolExecutor
, а затем использовать функцию map для выполнения этой функции на всех объектах. Будьте осторожны, если вы установите max_workers равным или большим, чем количество ядер ЦП, которое может возникнуть у других программ.
from concurrent.futures import ProcessPoolExecutor
with ProcessPoolExecutor(max_workers) as executor:
result = executor.map(lambda x: x.f(), items)