Python 多執行緒
在 Python 中,你可以使用 Python 2.x 中的 thread
模組或 Python 3 中的 _thread
模組來建立執行緒。我們將使用執行緒模組與之互動。
執行緒是一個作業系統程序,具有與正常程序不同的功能:
- 執行緒作為程序的子集存在
- 執行緒共享記憶體和資源
- 程序有不同的地址空間(在記憶體中)
你什麼時候使用執行緒?通常當你希望函式與程式同時發生時。如果你建立伺服器軟體,你希望伺服器不僅可以偵聽一個連線,還可以偵聽多個連線。簡而言之,執行緒使程式能夠一次執行多個任務。
Python 執行緒
讓我們建立一個執行緒程式。在這個程式中,我們將啟動 10 個執行緒,每個執行緒將輸出其 id
。
import threading
class MyThread (threading.Thread):
def __init__(self,x):
self.__x = x
threading.Thread.__init__(self)
def run (self):
print str(self.__x)
for x in xrange(10):
MyThread(x).start()
輸出:
0
1
...
9
如果執行一次,執行緒不必停止。執行緒可以定時,每隔 x
秒重複一次執行緒功能。
定時執行緒
在 Python 中,Timer
類是 Thread
類的子類。這意味著它的行為相似。我們可以使用 Timer
類來建立定時執行緒。定時器以 .start()
方法呼叫啟動,就像常規執行緒一樣。下面的程式建立一個在 5
秒後啟動的執行緒。
#!/usr/bin/env python
from threading import *
def hello():
print "hello, world"
t = Timer(10.0, hello)
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
t = Timer(5.0, handleClient1)
t2 = Timer(3.0, handleClient2)
t.start()
t2.start()