Выпускается ли GIL при использовании многопоточности с python-opencv? - PullRequest
0 голосов
/ 25 апреля 2018

Я делаю тяжелую обработку изображений в python3 для большой серии изображений, используя numpy и opencv. Я знаю, что Python имеет этот GIL, который предотвращает одновременное выполнение двух потоков. Быстрый поиск в Google сказал мне, что не используйте потоки в python для задач, интенсивно использующих процессор, используйте их только для ввода-вывода или сохранения файлов на диск, для связи с базой данных и т. Д. Я также читал, что GIL выпускается при работе с расширениями Си. Поскольку и numpy, и opencv являются расширениями C и C ++, у меня возникает ощущение, что GIL может быть выпущен. Я не уверен в этом, потому что обработка изображений - это интенсивная загрузка процессора. Моя интуиция верна или я лучше использую многопроцессорность?

1 Ответ

0 голосов
/ 27 апреля 2018

Ответ на вопрос заранее зависит от используемых вами функций.

Наиболее эффективный способ доказать, освобождает ли функция GIL, - проверка соответствующего источника.Также помогает проверка документации, но часто она просто не документирована.И да, это громоздко.

http://scipy -cookbook.readthedocs.io / items / Multithreading.html

[...] код NumPy часто освобождает GIL во время вычисления, так что простой параллелизм может ускорить код.

Каждый проект может использовать свой собственный макрос, так что если вы знакомы с настройками по умолчаниютакие макросы, как Py_BEGIN_ALLOW_THREADS из C Python API, могут оказаться переопределенными.Например, в Numpy это будет NPY_BEGIN_THREADS_DEF и т. Д.

...