成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何創(chuàng)建Python多線程環(huán)境

開發(fā) 后端
Python多線程環(huán)境是為了同步完成多項任務(wù),不是為了提高運行效率,而是為了提高資源使用效率來提高系統(tǒng)的效率。線程是在同一時間需要完成多項任務(wù)的時候?qū)崿F(xiàn)的。

Python里,進程和線程都是操作系統(tǒng)的概念,在這種線程模型中,一個進程中只能有一個線程,剩下的進程必須等待當前的線程執(zhí)行完,下文進行詳細說明介紹解析。

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

  1. [threadmodule.c]  
  2.  
  3. static PyObject* thread_PyThread_start_new_thread(PyObject *self, PyObject  
  4.  
  5.   *fargs)  
  6.  
  7. {  
  8.  
  9.     PyObject *func, *args, *keyw = NULL;  
  10.  
  11.     struct bootstate *boot;  
  12.  
  13.     long ident;  
  14.  
  15.     PyArg_UnpackTuple(fargs, "start_new_thread", 2, 3, &func, &args,  
  16.  
  17.       &keyw);  
  18.  
  19.     //[1]:創(chuàng)建bootstate結(jié)構(gòu)  
  20.  
  21.     boot = PyMem_NEW(struct bootstate, 1);  
  22.  
  23.     boot->interp = PyThreadState_GET()->interp;  
  24.  
  25.     boot->funcfunc = func;  
  26.  
  27.     boot->argsargs = args;  
  28.  
  29.     boot->keywkeyw = keyw;  
  30.  
  31.     //[2]:初始化多線程環(huán)境  
  32.  
  33.     PyEval_InitThreads(); /* Start the interpreter's thread-awareness */  
  34.  
  35.     //[3]:創(chuàng)建線程  
  36.  
  37.     ident = PyThread_start_new_thread(t_bootstrap, (void*) boot);  
  38.  
  39.     return PyInt_FromLong(ident);  
  40.  

代碼清單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對象,這個對象中攜帶了Python的module pool這樣的全局信息,Python中所有的thread都會共享這些全局信息。關(guān)于代碼清單15-1的[2]處所示的多線程環(huán)境的初始化動作,有一點需要特別說明,當Python啟動時,是并不支持多線程的。

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

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

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

責任編輯:chenqingxiang 來源: 博客園
相關(guān)推薦

2010-03-15 17:56:23

Java多線程

2010-03-10 08:54:49

Python多線程

2023-06-06 08:17:52

多線程編程Thread類

2009-06-29 17:54:10

Java多線程Thread類創(chuàng)建線程

2021-02-25 15:58:46

C++線程編程開發(fā)技術(shù)

2009-06-29 18:00:05

Java多線程Runnable接口創(chuàng)建線程

2010-03-12 16:39:55

Python多線程

2025-05-12 04:00:01

2023-10-19 08:30:58

線程源碼thread

2011-10-31 15:59:56

SQLiteiPhoneiOS

2017-03-08 14:18:37

Linux多線程編程

2009-08-12 13:22:44

Singleton模式

2010-02-01 17:25:09

Python多線程

2023-10-06 23:06:01

多線程Python

2021-08-12 14:33:20

Python多線程編程

2009-03-12 10:52:43

Java線程多線程

2024-11-27 15:58:49

2023-05-12 14:14:00

Java線程中斷

2010-03-18 16:02:09

python 多線程

2020-11-18 09:48:09

Synchronize多線程Java
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 欧美日韩视频在线播放 | 国产精品区一区二区三区 | 色五月激情五月 | 九九热久久免费视频 | 亚洲成人一区二区三区 | 在线国产一区二区三区 | 在线一区观看 | 国产欧美一级 | 国产在线精品一区二区 | 操操操av| 国产精品视频免费观看 | 在线观看视频91 | 日韩一区三区 | 手机看黄av免费网址 | 成人h视频在线 | 欧美一区二区在线 | 中文字幕在线不卡 | 亚洲国产黄 | 午夜精品久久久久久久久久久久久 | 久久视频精品 | 妞干网福利视频 | 午夜成人在线视频 | 日韩av在线一区 | 国产精品a久久久久 | 国产丝袜一区二区三区免费视频 | 中文在线一区 | 国产精品久久久久免费 | 久久国产高清视频 | 99re在线| 日韩欧美不卡 | 国产精品视频在线播放 | 四虎影视 | 亚洲欧美在线视频 | 国产精品成人一区二区三区夜夜夜 | 免费久久久 | 亚洲系列第一页 | 成人免费在线观看 | 老司机午夜性大片 | 精品国产乱码一区二区三区a | 亚洲成人一区二区三区 | 玖玖综合网 |