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