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

    python阻塞调度如何使用

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

    说明

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

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

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

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

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

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

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

    实例

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

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