ITPub博客

首页 > IT职业 > IT图书 > Python中如何切换GIL?

Python中如何切换GIL?

IT图书 作者:johnchou 时间:2021-09-11 09:57:55 0 删除 编辑

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)。

#define Py_BEGIN_ALLOW_THREADS { 
                        PyThreadState *_save; 
                        _save = PyEval_SaveThread();

以上就是Python中切换GIL的方法,希望对大家有所帮助。更多Python学习推荐:python教学

本文教程操作环境:windows7系统、Python 3.9.1,DELL G3电脑。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4422/viewspace-2830388/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2020-11-13

  • 博文量
    80
  • 访问量
    7437