在Python中,可以使用 Python2.x 的 thread 模塊或在 Python 3中的 _thread 模塊線程。我們將使用線程模塊來與它進行交互。
線程是一個係統的進程,隻是比一個正常的進程有不同的操作:
- 線程作為一個過程的一個子集
- 線程共享內存和資源
- 進程具有不同的地址空間(在存儲器中)
什麼時候使用線程?通常,當程序想要一個函數在相同時間。如果創建服務器軟件,所需的服務器不是隻監聽一個連接,會有許多連接請求。總之,線程使程序同時執行多個任務。
Python線程
讓我們創建一個線程程序。在這個項目中,我們將啟動10個線程並輸出其ID。import threading # Our thread class class MyThread (threading.Thread): def __init__(self,x): self.__x = x threading.Thread.__init__(self) def run (self): print str(self.__x) # Start 10 threads. for x in xrange(10): MyThread(x).start()
結果輸出:
0 1 ... 9
線程一旦運行不必停止。線程可以定時,其中一個線程每 x 秒重複功能。
定時線程
在Python,Timer類是Thread類的子類。這意味著它們的行為類似。我們可以使用定時器類來創建定時線程。計時器使用 .start() 方法調用啟動,就像普通的線程。下麵的程序 5 秒後啟動創建一個線程。#!/usr/bin/env python from threading import * def hello(): print "hello, world" # create thread t = Timer(10.0, hello) # start thread after 10 seconds t.start()
使用線程重複功能
我們可以無休止地執行線程,就像這樣:
#!/usr/bin/env python from threading import * import time def handleClient1(): while(True): print "Waiting for client 1..." time.sleep(5) # wait 5 seconds def handleClient2(): while(True): print "Waiting for client 2..." time.sleep(5) # wait 5 seconds # create threads t = Timer(5.0, handleClient1) t2 = Timer(3.0, handleClient2) # start threads t.start() t2.start()