1、GIL通过判断指令计数器切换到GIL
(1)python的解释器在大循环中逐一解析字节码指令;
(2)每次开始循环都会检查_Py_Ticker值。
{ ... for(;;) ... if(--_Py_Ticker<0){ ... _Py_Ticker=_Py_CheckInterval; ... if(interpreter_lock){ ... PyThread_release_lock(interpreter_lock); PyThread_acquire_lock(interpreter_lock,1); } } ... switch(opcode){ case:... } } }
2、在切换GILIO阻塞之前,切换GIL
Python允许执行blocksystemm 在此之前,允许其他线程执行(Py_BEGIN_ALLOW_THREADS),然后再次尝试获得GIL(Py_END_ALLOW_THREADS)。
#definePy_BEGIN_ALLOW_THREADS{\ PyThreadState*_save;\ _save=PyEval_SaveThread();
以上是Python中切换GIL的方法,希望对大家有所帮助。更多Python学习推荐:python教学
本文教程操作环境:windows7系统Python 3.9.1,DELL G3电脑。