您好,登錄后才能下訂單哦!
這篇文章主要介紹python阻塞調(diào)度的使用方法,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
python常用的庫(kù):1.requesuts;2.scrapy;3.pillow;4.twisted;5.numpy;6.matplotlib;7.pygama;8.ipyhton等。
1、說(shuō)明
標(biāo)準(zhǔn)調(diào)度是python使用軟件時(shí)鐘調(diào)度線程,有時(shí)python的線程會(huì)自動(dòng)阻塞,例如raw_input(),sleep()等功能,此時(shí)python使用阻塞調(diào)度。
(1)主線程調(diào)用sleep(1)后,調(diào)用Py_BEGIN_ALLOW_THREADS立即釋放GIL,然后調(diào)用操作系統(tǒng)的sleep操作。此時(shí),主線程由操作系統(tǒng)自動(dòng)管理。
(2)子線程獲得GIL。此時(shí),主線程和子線程可以同時(shí)由操作系統(tǒng)安排。操作系統(tǒng)在執(zhí)行子線程一段時(shí)間后懸掛,安排主線程,在主線程sleep結(jié)束前懸掛主線程,繼續(xù)喚醒子線程執(zhí)行。
(3)當(dāng)主線程結(jié)束時(shí),操作系統(tǒng)喚醒主線程。主線程調(diào)用Py_END_ALLOW_THREADS再次申請(qǐng)GIL,重新進(jìn)入python標(biāo)準(zhǔn)調(diào)度過(guò)程。
2、實(shí)例
[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阻塞調(diào)度的使用方法”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。