欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Python中怎么搭建多線程環(huán)境

Python中怎么搭建多線程環(huán)境,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

創(chuàng)新互聯(lián)于2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元大渡口做網(wǎng)站,已為上家服務(wù),為大渡口各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792

在Python的thread module所提供的接口中,一定不能少的肯定是創(chuàng)建線程的接口,倘若沒有這個(gè)接口,生活還有什么意義呢J?在上面的thread1.py中,我們正是通過其提供的start_new_thread創(chuàng)建了一個(gè)嶄新的線程。好,我們就進(jìn)入這個(gè)start_new_ thread,看看Python是如何進(jìn)行創(chuàng)世紀(jì)的工作的。

[threadmodule.c]   static PyObject* thread_PyThread_start_new_thread(PyObject *self, PyObject     *fargs)   {       PyObject *func, *args, *keyw = NULL;       struct bootstate *boot;       long ident;       PyArg_UnpackTuple(fargs, "start_new_thread", 2, 3, &func, &args,         &keyw);       //[1]:創(chuàng)建bootstate結(jié)構(gòu)       boot = PyMem_NEW(struct bootstate, 1);       boot->interp = PyThreadState_GET()->interp;       boot->funcfunc = func;       boot->argsargs = args;       boot->keywkeyw = keyw;       //[2]:初始化多線程環(huán)境       PyEval_InitThreads(); /* Start the interpreter's thread-awareness */       //[3]:創(chuàng)建線程       ident = PyThread_start_new_thread(t_bootstrap, (void*) boot);       return PyInt_FromLong(ident);   }

代碼清單15-1的[1]、[2]和[3]分別有如下含義:

[1]  創(chuàng)建并初始化bootstate結(jié)構(gòu)boot,在boot中,將保存關(guān)于線程的一切信息,如:線程過程,線程過程的參數(shù)等。

[2]  初始化Python多線程環(huán)境。

[3]  以boot為參數(shù),創(chuàng)建操作系統(tǒng)的原生線程。

在代碼清單15-1的[1]中,我們注意到boot->interp中保存了Python的PyInter- preterState對(duì)象,這個(gè)對(duì)象中攜帶了Python的module pool這樣的全局信息,Python中所有的thread都會(huì)共享這些全局信息。關(guān)于代碼清單15-1的[2]處所示的多線程環(huán)境的初始化動(dòng)作,有一點(diǎn)需要特別說明,當(dāng)Python啟動(dòng)時(shí),是并不支持多線程的。

換句話說,Python中支持多線程的數(shù)據(jù)結(jié)構(gòu)以及GIL都是沒有創(chuàng)建的,Python之所以有這種行為是因?yàn)榇蠖鄶?shù)的Python程序都不需要多線程的支持。假如一個(gè)簡(jiǎn)單地統(tǒng)計(jì)詞頻的Python腳本中居然出現(xiàn)了多線程,面對(duì)這樣的代碼,我們一定都會(huì)抓狂的J。

對(duì)多線程的支持并非是沒有代價(jià)的,最簡(jiǎn)單的一點(diǎn),如果激活多線程機(jī)制,而執(zhí)行的Python程序中并沒有多線程,那么在100條指令之后,Python虛擬機(jī)同樣會(huì)激活線程的調(diào)度。而如果不激活多線程,Python多線程環(huán)境虛擬機(jī)則不用做這些無(wú)用功。所以Python選擇了讓用戶激活多線程機(jī)制的策略。在Python虛擬機(jī)啟動(dòng)時(shí)。

多線程機(jī)制并沒有被激活,它只支持單線程,一旦用戶調(diào)用thread.start_new_thread,明確指示Python虛擬機(jī)創(chuàng)建新的線程。Python就能意識(shí)到用戶需要多線程的支持,這個(gè)時(shí)候,Python多線程環(huán)境會(huì)自動(dòng)建立多線程機(jī)制需要的數(shù)據(jù)結(jié)構(gòu)、環(huán)境以及那個(gè)至關(guān)重要的GIL。

看完上述內(nèi)容,你們掌握Python中怎么搭建多線程環(huán)境的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

當(dāng)前文章:Python中怎么搭建多線程環(huán)境
當(dāng)前網(wǎng)址:http://chinadenli.net/article10/gesggo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、企業(yè)建站建站公司、標(biāo)簽優(yōu)化、軟件開發(fā)用戶體驗(yàn)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

營(yíng)銷型網(wǎng)站建設(shè)