Как вызвать метод для всех объектов в списке, используя все ядра?

По крайней мере одна проблема в вашей функции invalidChar. Это должно быть:

return !isprint( static_cast<unsigned char>( c ) );

Приведение функции char в unsigned может привести к очень большим, очень большим значениям, если char отрицательно (UNIT_MAX+1 + c). Passing such a value to isprint` является неопределенным поведением .

0
задан Ufx 20 March 2019 в 08:05
поделиться

1 ответ

В 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)
0
ответ дан seenorth 20 March 2019 в 08:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: