Многопоточность в python для задач, связанных с процессором, ограничена GIL и эффективно заставляет один поток выполняться одновременно.
Конечно, если вы запустите несколько потоков для задач, связанных с процессором, производительность будет даже снижена, потому что для интерпретатора ядра и python для управления этими потоками требуется много ресурсов.
Ядро хочет запланировать эти потоки, а python хочет запретить одновременную работу этих потоков, и в результате происходит много переключений контекста, что снижает производительность.
Если вы используете только numpy
в потоках, то все будет в порядке, поскольку GIL
не затронут [112], поскольку он использует атомарные операции, но я не уверен, верно ли это для OpenCV
также.
Потоки в python не предназначены для вычислительных задач.
Это классическая проблема потоков с python, рассмотрите возможность использования multiprocessing
, и есть ряд статей на эту тему, вы можете проверить несколько из них.
Потоки не выполняются параллельно в cpython. Попробуйте вместо этого использовать ProcessPoolExecutor.