日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python多线程编程(1): python对多线程的支持

發布時間:2023/12/9 python 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python多线程编程(1): python对多线程的支持 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

From: http://www.cnblogs.com/holbrook/archive/2012/03/01/2376408.html

?

前面介紹過多線程的基本概念,理解了這些基本概念,掌握python多線程編程就比較容易了。

在開始之前,首先要了解一下python對多線程的支持。

虛擬機層面

Python虛擬機使用GIL(Global Interpreter Lock,全局解釋器鎖)來互斥線程對共享資源的訪問,暫時無法利用多處理器的優勢。

語言層面

在語言層面,Python對多線程提供了很好的支持,Python中多線程相關的模塊包括:thread,threading,Queue。可以方便地支持創建線程、互斥鎖、信號量、同步等特性。

thread:多線程的底層支持模塊,一般不建議使用。

threading:對thread進行了封裝,將一些線程的操作對象化,提供下列類:

Thread?線程類

Timer與Thread類似,但要等待一段時間后才開始運行

Lock?鎖原語

RLock?可重入鎖。使單線程可以再次獲得已經獲得的鎖

Condition?條件變量,能讓一個線程停下來,等待其他線程滿足某個“條件”

Event?通用的條件變量。多個線程可以等待某個事件發生,在事件發生后,所有的線程都被激活

Semaphore為等待鎖的線程提供一個類似“等候室”的結構

BoundedSemaphore?與semaphore類似,但不允許超過初始值

Queue:實現了多生產者(Producer)、多消費者(Consumer)的隊列,支持鎖原語,能夠在多個線程之間提供很好的同步支持。提供的類:

Queue隊列

LifoQueue后入先出(LIFO)隊列

PriorityQueue 優先隊列

?

其中Thread類是你主要的線程類,可以創建進程實例。該類提供的函數包括:

getName(self)?返回線程的名字

isAlive(self)?布爾標志,表示這個線程是否還在運行中

isDaemon(self)?返回線程的daemon標志

join(self, timeout=None) 程序掛起,直到線程結束,如果給出timeout,則最多阻塞timeout秒

run(self)?定義線程的功能函數

setDaemon(self, daemonic)? 把線程的daemon標志設為daemonic

setName(self, name)?設置線程的名字

start(self)?開始線程執行

?

第三方支持

如果你特別在意性能,還可以考慮一些“微線程”的實現:

Stackless Python:Python的一個增強版本,提供了對微線程的支持。微線程是輕量級的線程,在多個線程間切換所需的時間更多,占用資源也更少。

greenlet:是 Stackless 的副產品,其將微線程稱為 “tasklet” 。tasklet運行在偽并發中,使用channel進行同步數據交換。而”greenlet”是更加原始的微線程的概念,沒有調度。你可以自己構造微線程的調度器,也可以使用greenlet實現高級的控制流。

下一節,將開始用python創建和啟動線程。

本人已在github上用Jekyll建立了新的博客:http://thinkinside.tk/,本站文章會陸續遷移過去

總結

以上是生活随笔為你收集整理的python多线程编程(1): python对多线程的支持的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。