中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中怎么搭建多線程環境

發布時間:2021-07-19 16:14:39 來源:億速云 閱讀:191 作者:Leah 欄目:編程語言

Python中怎么搭建多線程環境,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

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

[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]:創建bootstate結構       boot = PyMem_NEW(struct bootstate, 1);       boot->interp = PyThreadState_GET()->interp;       boot->funcfunc = func;       boot->argsargs = args;       boot->keywkeyw = keyw;       //[2]:初始化多線程環境       PyEval_InitThreads(); /* Start the interpreter's thread-awareness */       //[3]:創建線程       ident = PyThread_start_new_thread(t_bootstrap, (void*) boot);       return PyInt_FromLong(ident);   }

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

[1]  創建并初始化bootstate結構boot,在boot中,將保存關于線程的一切信息,如:線程過程,線程過程的參數等。

[2]  初始化Python多線程環境

[3]  以boot為參數,創建操作系統的原生線程。

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

換句話說,Python中支持多線程的數據結構以及GIL都是沒有創建的,Python之所以有這種行為是因為大多數的Python程序都不需要多線程的支持。假如一個簡單地統計詞頻的Python腳本中居然出現了多線程,面對這樣的代碼,我們一定都會抓狂的J。

對多線程的支持并非是沒有代價的,最簡單的一點,如果激活多線程機制,而執行的Python程序中并沒有多線程,那么在100條指令之后,Python虛擬機同樣會激活線程的調度。而如果不激活多線程,Python多線程環境虛擬機則不用做這些無用功。所以Python選擇了讓用戶激活多線程機制的策略。在Python虛擬機啟動時。

多線程機制并沒有被激活,它只支持單線程,一旦用戶調用thread.start_new_thread,明確指示Python虛擬機創建新的線程。Python就能意識到用戶需要多線程的支持,這個時候,Python多線程環境會自動建立多線程機制需要的數據結構、環境以及那個至關重要的GIL。

看完上述內容,你們掌握Python中怎么搭建多線程環境的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

富平县| 遵义县| 吴堡县| 涿鹿县| 罗源县| 得荣县| 肥城市| 松江区| 朝阳市| 图木舒克市| 肇东市| 津南区| 贡觉县| 白城市| 锡林浩特市| 兰州市| 邵东县| 巧家县| 东丽区| 故城县| 诸暨市| 会同县| 毕节市| 名山县| 雅安市| 安龙县| 钦州市| 清新县| 邛崃市| 泰和县| 江都市| 阿巴嘎旗| 齐河县| 蕲春县| 定襄县| 民丰县| 双牌县| 武清区| 都昌县| 庄浪县| 上虞市|