知行编程网知行编程网  2022-11-17 15:00 知行编程网 隐藏边栏  22 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于python阻塞调度如何使用的相关知识,希望可以帮到处于编程学习途中的小伙伴

如何使用python阻塞调度


说明

标准调度是python使用软件时钟来调度线程。有时python线程会自动阻塞,比如raw_input()、sleep()等函数。这时候python使用阻塞调度。

1、主线程调用sleep后,立即释放GIL。

调用操作系统的休眠操作。此时,主线程由操作系统自动管理。

2.子线程获得GIL。操作系统可以同时调度主线程和子线程。

操作系统在子线程执行一段时间后挂起,安排主线程,在主线程休眠结束前挂起主线程,继续唤醒子线程执行。

3、当主线程结束时,操作系统唤醒主线程。

主线程调用Py_END_ALLOW_THREADS再次申请GIL,重新进入python标准调度过程。


实例

[ceval.h]
#define Py_BEGIN_ALLOW_THREADS { \
            PyThreadState *_save; \
            _save = PyEval_SaveThread();
#define Py_END_ALLOW_THREADS    PyEval_RestoreThread(_save); \
         }
 
[ceval.c]
PyThreadState* PyEval_SaveThread(void)
{
    PyThreadState *tstate = PyThreadState_Swap(NULL);
    if (interpreter_lock)
        PyThread_release_lock(interpreter_lock);
    return tstate;
}
 
void PyEval_RestoreThread(PyThreadState *tstate)
{
    if (interpreter_lock) {
        int err = errno;
        PyThread_acquire_lock(interpreter_lock, 1);
        errno = err;
    }
    PyThreadState_Swap(tstate);
}


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

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享