溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

python阻塞調(diào)度的使用方法

發(fā)布時(shí)間:2021-04-30 09:35:30 來(lái)源:億速云 閱讀:201 作者:小新 欄目:編程語(yǔ)言

這篇文章主要介紹python阻塞調(diào)度的使用方法,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

python有哪些常用庫(kù)

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è)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI