【说站】python阻塞调度如何使用
2024-12-11
7
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电脑。
更新于:21小时前赞一波!1
相关文章
- 【说站】python chardet库的函数用法
- 【说站】python中使用动量交易策略
- 【说站】python迭代器协议支持的两种方法
- 【说站】python中chardet库的安装和导入
- 【说站】python PyQt5如何实现窗口功能
- 【说站】python动量交易策略的四个步骤
- 【说站】Python中__slots__限制属性
- 【说站】python如何实现事务机制
- 【说站】Python bs4的四种对象
- 【说站】python动态规划算法的使用过程
- 【说站】Python unittest有哪些使用方法
- 【说站】python线程安全的介绍及解决方法
- 【说站】Python测试前置操作的方法
- 【说站】python tqdm有哪些用法
- 【说站】python正态分布中的normal函数
- 【说站】python socket连接客户端的方法
- 【说站】python socketserver处理客户端的流程
- 【说站】python TCP和UDP协议的区别分析
- 【说站】python if三元表达式如何使用
- 【说站】python自定义进度条显示信息
文章评论
评论问答