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()