Я пишу расширение C++ для своего приложения Python. Я понимаю, что Python GIL используется для предотвращения одновременного доступа нескольких потоков к PyObject. Тем не менее, мои вопросы заключаются в том, что мой код расширения является однопоточным, нужно ли мне приобретать GIL?
Допустим, в приложении Python есть такие коды, как
import time
from threading import Thread
COUNT = 50000000
def countdown(n):
while n>0:
n -= 1
t1 = Thread(target=countdown, args=(COUNT//2,))
t2 = Thread(target=countdown, args=(COUNT//2,))
start = time.time()
t1.start()
t2.start()
t1.join()
t2.join()
end = time.time()
print('Time taken in seconds -', end - start)
Я знаю, что хотя есть 2 потока, они не будут выполняться параллельно из-за GIL. Что, если я вызову расширение C++ в обоих потоках, а расширение C++ будет однопоточным? Нужно ли мне учитывать GIL?
Или другой вопрос, я предполагаю, что поток попытается удержать GIL в коде Python. Если он покинет Python и будет выполнять код на C++, будет ли выпущен GIL?