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

    python阻塞调度如何使用

    小妮浅浅小妮浅浅2021-08-10 09:48:07原创2917

    说明

    标准调度是python使用软件时钟调度线程,有时python的线程会自动阻塞,例如raw_input(),sleep()等功能,此时python使用阻塞调度。

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

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

    2、子线程获得GIL。主线程和子线程可以同时由操作系统安排。

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

    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);
    }

    以上就是python阻塞调度的使用,希望对大家有所帮助。更多Python学习指路:python基础教程

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

    专题推荐:python阻塞调度
    上一篇:python PyQt5如何实现窗口功能 下一篇:python标记清除的过程

    相关文章推荐

    • python迭代器协议支持的两种方法• python中chardet库的安装和导入• python chardet库的函数用法• python中使用动量交易策略• python动量交易策略的四个步骤• python time库有哪些时钟• python time.ctime()如何做时间加减法• python strftime获取当前时间• python mktime()如何计算时间• python数据模块类如何定义

    全部评论我要评论

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

  • 取消发布评论
  • 

    Python学习网