Предположим, у меня есть функция C (++), принимающая целое число, и она связана с (C) python с помощью python api, поэтому я могу вызвать ее из python:
import c_module
c_module.f(10)
Теперь я хочу распараллелить это. Проблема в том, как работает GIL в этом случае? Предположим, у меня есть очередь чисел для обработки, и некоторые работники (threading.Thread
) работают параллельно, каждый из них вызывает c_module.f(number)
, где number
берется из очереди.
Разница с обычным случаем, когда GIL блокирует интерпретатор, состоит в том, что теперь вам не нужен интерпретатор для оценки c_module.f
, потому что он скомпилирован. Таким образом, вопрос: в этом случае обработка действительно параллельна?