国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

詳解python多線程、鎖、event事件機制的簡單使用

2020-02-22 23:53:59
字體:
來源:轉載
供稿:網友

線程和進程

1、線程共享創建它的進程的地址空間,進程有自己的地址空間

2、線程可以訪問進程所有的數據,線程可以相互訪問

3、線程之間的數據是獨立的

4、子進程復制線程的數據

5、子進程啟動后是獨立的 ,父進程只能殺掉子進程,而不能進行數據交換

6、修改線程中的數據,都是會影響其他的線程,而對于進程的更改,不會影響子進程

threading.Thread

Thread 是threading模塊中最重要的類之一,可以使用它來創建線程。有兩種方式來創建線程:一種是通過繼承Thread類,重寫它的run方法;另一種是創建一個threading.Thread對象,在它的初始化函數(__init__)中將可調用對象作為參數傳入。
先來看看通過繼承threading.Thread類來創建線程的例子:

import threadingimport timeclass MyThread(threading.Thread): def __init__(self, arg):  # super(MyThread, self).__init__() # 新式類繼承原有方法寫法  threading.Thread.__init__(self)  self.arg = arg def run(self):  time.sleep(2)  print(self.arg)for i in range(10): thread = MyThread(i) print(thread.name) thread.start()

另外一種創建線程的方法:

import threadingimport timedef process(arg): time.sleep(2) print(arg)for i in range(10): t = threading.Thread(target=process, args=(i,)) print(t.name) t.start()

Thread類還定義了以下常用方法與屬性:

Thread.getName() 獲取線程名稱

Thread.setName() 設置線程名稱

Thread.name 線程名稱

Thread.ident 獲取線程的標識符。線程標識符是一個非零整數,只有在調用了start()方法之后該屬性才有效,否則它只返回None

判斷線程是否是激活的(alive)。從調用start()方法啟動線程,到run()方法執行完畢或遇到未處理異常而中斷 這段時間內,線程是激活的

Thread.is_alive()
Thread.isAlive()

Thread.join([timeout]) 調用Thread.join將會使主調線程堵塞,直到被調用線程運行結束或超時。參數timeout是一個數值類型,表示超時時間,如果未提供該參數,那么主調線程將一直堵塞到被調線程結束

Python GIL(Global Interpreter Lock)

GIL并不是Python的特性,它是在實現Python解析器(CPython)時所引入的一個概念。就好比C++是一套語言(語法)標準,但是可以用不同的編譯器來編譯成可執行代碼。有名的編譯器例如GCC,INTEL C++,Visual C++等。Python也一樣,同樣一段代碼可以通過CPython,PyPy,Psyco等不同的Python執行環境來執行。像其中的JPython就沒有GIL。然而因為CPython是大部分環境下默認的Python執行環境。所以在很多人的概念里CPython就是Python,也就想當然的把GIL歸結為Python語言的缺陷。所以這里要先明確一點:GIL并不是Python的特性,Python完全可以不依賴于GIL。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 许昌市| 太康县| 临清市| 洛宁县| 碌曲县| 鄂伦春自治旗| 定西市| 德阳市| 盐山县| 遂宁市| 中方县| 南华县| 达州市| 衡阳市| 台北县| 阿坝| 大关县| 香格里拉县| 白银市| 石泉县| 东乡| 徐州市| 大安市| 蓬安县| 宜川县| 诸城市| 施甸县| 盖州市| 连南| 航空| 阿拉尔市| 鸡东县| 霞浦县| 定襄县| 灵武市| 嘉禾县| 房产| 望江县| 揭东县| 玉林市| 兴山县|