1、通过判断指令计数器切换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、IO阻塞之前切换GIL
Python允许在执行block型的system call之前允许其他线程执行(Py_BEGIN_ALLOW_THREADS),然后再重新尝试获取GIL(Py_END_ALLOW_THREADS)。
#definePy_BEGIN_ALLOW_THREADS{\ PyThreadState*_save;\ _save=PyEval_SaveThread();
以上就是Python中切换GIL的方法,希望对大家有所帮助。更多Python学习推荐:python教学
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(0)