• 技术文章 >Python技术 >Python基础教程

    Python中如何切换GIL?

    小妮浅浅小妮浅浅2021-05-28 09:28:17原创2033

    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电脑。

    专题推荐:python gil
    上一篇:Python获取GIL锁的流程 下一篇:Python描述符的两种类型

    相关文章推荐

    • Python实例属性的优先级分析• Python类成员的访问限制• Python魔术方法的三个特点• Python中装饰属性的方法• Python死锁的产生原因• Python中threading.RLock的使用• Python获取GIL锁的流程

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网