python阻塞调度如何使用

python阻塞调度如何使用

说明

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

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

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

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

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

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

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

实例

[ceval.h]
#definePy_BEGIN_ALLOW_THREADS{\
PyThreadState*_save;\
_save=PyEval_SaveThread();
#definePy_END_ALLOW_THREADSPyEval_RestoreThread(_save);\
}

[ceval.c]
PyThreadState*PyEval_SaveThread(void)
{
PyThreadState*tstate=PyThreadState_Swap(NULL);
if(interpreter_lock)
PyThread_release_lock(interpreter_lock);
returntstate;
}

voidPyEval_RestoreThread(PyThreadState*tstate)
{
if(interpreter_lock){
interr=errno;
PyThread_acquire_lock(interpreter_lock,1);
errno=err;
}
PyThreadState_Swap(tstate);
}

以上就是python阻塞调度的使用,希望对大家有所帮助。更多python学习指路:python基础教程