【说站】python阻塞调度如何使用
2024-12-11
58
python阻塞调度如何使用
说明
标准调度是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电脑。
更新于:1个月前赞一波!3
相关文章
- 【说站】Python curses库如何使用
- 【说站】Python字典常用方法汇总
- 【说站】Python字符串方法如何使用
- 【说站】javascript递归函数如何使用
- 【说站】Python列表操作方法的整理
- 【说站】Python中os模块的功能介绍
- 【说站】python模块的搜索顺序分析
- 【说站】python抛出raise异常的注意点
- 【说站】Python psd-tools如何转换文件
- 【说站】python异常的传递
- 【说站】python自定义日志如何实现
- 【说站】python有哪些注释的种类
- 【说站】python中__new__的重写
- 【说站】python如何解决初始化执行次数
- 【说站】python错误类型捕获的方法
- 【说站】python数据结构堆的介绍
- 【说站】python参数调用的注意点
- 【说站】python Pandas读取数据文件的优点
- 【说站】python中in和is的区分
- 【说站】python异常中常见关键字
文章评论
评论问答