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

    Python中如何切换GIL?

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

    1、通过判断指令计数器切换GIL

    (1)python的解释器是在一个大的循环中逐个解析字节码指令;

    (2)每次循环开始都会检查一下_Py_Ticker的值。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    {

        ...

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

    1

    2

    3

    #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学习网