python阻塞和非阻塞,python阻塞队列
说明
标准调度是python使用软件时钟来调度线程。有时候python的线程会自动阻塞,比如raw_input()、sleep()等函数。这时候python使用的是阻塞调度。
1.主线程调用睡眠后,立即释放GIL。
调用操作系统的睡眠操作。此时,主线程由操作系统自动管理。
2.子线程获得GIL。操作系统可以同时调度主线程和子线程。
操作系统在执行子线程一段时间后挂起,安排主线程,在主线程睡眠结束前挂起主线程,继续唤醒子线程执行。
3.当主线程结束时,操作系统唤醒主线程。
主线程调用Py_END_ALLOW_THREADS再次申请GIL,重新进入python标准调度流程。
实例
[ceval.h]
# define py _ BEGIN _ ALLOW _ THREADS {
python readstate * _ save;
_ save=pye val _ save thread();
# define py _ END _ ALLOW _ THREADSPyEval _ restore thread(_ save);
}
[ceval.c]
python readstate * pye val _ save thread(void)
{
python readstate * tstate=python readstate _ Swap(NULL);
if(解释器_锁)
PyThread _ release _ lock(解释器_锁);
returntstate
}
voidPyEval _ restore thread(python readstate * tstate)
{
if(interpreter_lock){
interr=errno
PyThread _ acquire _ lock(解释器_锁,1);
errno=err
}
python readstate _ Swap(tstate);
}以上是python分块调度的使用。希望对你有帮助。更多python学习方向:Python基础课程
本教程运行环境:windows7系统,Python 3.9.1,DELL G3电脑。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。