2 Cython Nogil:

Cython является альтернативным интерпретатором Python. Он использует GIL, но позволяет отключить его. Смотрите их документации

В качестве примера, используя код , который Дэвид Бизли первым используется , чтобы показать опасность нитей против GIL , мы перепишем его с помощью nogil:

Код Дэвида Бизли, который показал проблемы с GIL-потоками

 from threading import Thread
import time
def countdown(n):
    while n > 0:
        n -= 1

COUNT = 10000000

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 end-start

 

Переписано с использованием nogil (ТОЛЬКО РАБОТАЕТ НА ЦИФОНЕ):

 from threading import Thread
import time
def countdown(n):
    while n > 0:
        n -= 1

COUNT = 10000000

with nogil:
    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 end-start

 

Это так просто, если вы используете Cython. Обратите внимание, что в документации сказано, что вы должны быть уверены, что не меняете объекты Python:

Код в теле оператора не должен каким-либо образом манипулировать объектами Python и не должен вызывать ничего, что манипулирует объектами Python без предварительного повторного получения GIL. Cython в настоящее время не проверяет это.