本文以實例形式較為詳細的講述了Python中多線程的用法,在Python程序設計中有著比較廣泛的應用。分享給大家供大家參考之用。具體分析如下:
python中關于多線程的操作可以使用thread和threading模塊來實現,其中thread模塊在Py3中已經改名為_thread,不再推薦使用。而threading模塊是在thread之上進行了封裝,也是推薦使用的多線程模塊,本文主要基于threading模塊進行介紹。在某些版本中thread模塊可能不存在,要使用dump_threading來代替threading模塊。
一、線程創建
threading模塊中每個線程都是一個Thread對象,創建一個線程有兩種方式,一種是將函數傳遞到Thread對象中執行,另一種是從Thread繼承,然后重寫run方法(是不是跟Java很像)。
下面使用這兩種方法分別創建一個線程并同時執行
import random, threadingdef threadFunction(): for i in range(10): print 'ThreadFuction - %d'%i time.sleep(random.randrange(0,2))class ThreadClass(threading.Thread): def __init__(self): threading.Thread.__init__(self); def run(self): for i in range(10): print 'ThreadClass - %d'%i time.sleep(random.randrange(0,2))if __name__ == '__main__': tFunc = threading.Thread(target = threadFunction); tCls = ThreadClass() tFunc.start() tCls.start()
執行結果如下,可以看到兩個線程在交替打印。至于空行和一行多個輸出,是因為Py的print并不是線程安全的,在當前線程的print打印了部分內容后,準備打印換行之前,被別的線程中的print搶先,在換行之前打印了其它的內容。
ThreadFuction - 0ThreadFuction - 1ThreadFuction - 2ThreadClass - 0ThreadFuction - 3ThreadClass - 1ThreadFuction - 4ThreadClass - 2ThreadClass - 3ThreadClass - 4ThreadFuction - 5ThreadClass - 5ThreadClass - 6ThreadClass - 7ThreadClass - 8ThreadFuction - 6ThreadClass - 9ThreadFuction - 7ThreadFuction - 8ThreadFuction - 9
Thread類的構造函數定義如下
class threading.Thread(group=None, target=None, name=None, args=(), kwargs={})
group: 留作ThreadGroup擴展使用,一般沒什么用
target:新線程的任務函數名
name: 線程名,一般也沒什么用
args: tuple參數
kwargs:dictionary參數
Thread類的成員變量和函數如下
start() 啟動一個線程
run() 線程執行體,也是一般要重寫的內容
join([timeout]) 等待線程結束
name 線程名
ident 線程ID
daemon 是否守護線程
isAlive()、is_alive() 線程是否存活
新聞熱點
疑難解答