Python中如何切换GIL?

美女程序员鼓励师

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? 的全部内容, 来源链接: utcz.com/z/543848.html

回到顶部