导语:
本文主要介绍了关于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电脑。
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ pandas 布尔索引是如何实现的?12/19
- ♥ 如何从python中读取sql09/20
- ♥ python中不同模板的分析11/25
- ♥ Python Process创建过程详解(2种方法)12/29
- ♥ python被广泛使用了吗?10/11
- ♥ python 每行输出五个数字08/15
内容反馈