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基础教程
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。