Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Mô-đun Threading trong Python


Mô-đun threading mới hơn đi kèm với Python 2.4 cung cấp hỗ trợ mạnh mẽ, cấp độ cao hơn cho luồng so với mô-đun thread thảo luận ở phần trước.

Mô-đun threading公開所有thread模块的方法,并提供一些额外的方法:

  • threading.activeCount() - Trả về số đối tượng luồng đang hoạt động.
  • threading.currentThread() - Trả về số đối tượng luồng trong điều khiển luồng của người gọi.
  • threading.enumerate() - Trả về danh sách tất cả đối tượng luồng hiện đang hoạt động.

Ngoài các phương thức, mô-đun threading có lớp Thread triển khai luồng. Các phương thức do lớp Thread cung cấp như sau:

  • run() - Điểm vào cho một luồng.
  • start() - Khởi động luồng bằng cách gọi phương thức run.
  • join([time]) - Đợi luồng kết thúc.
  • isAlive() - Kiểm tra luồng còn đang thực thi không.
  • getName() - Trả về tên luồng.
  • setName() - Đặt tên luồng.

Tạo luồng sử dụng mô-đun Threading

Để triển khai luồng mới sử dụng mô-đun threading, bạn phải làm theo các bước sau:

  • Định nghĩa một lớp con mới của lớp Thread.
  • Ghi đè phương thức __init__(self [,args]) để thêm tham số.
  • Sau đó, ghi đè phương thức run(self [,args]) để triển khai những gì luồng nên làm khi bắt đầu.

Khi đã tạo lớp con Thread mới, bạn có thể tạo một thể hiện của nó và bắt đầu luồng mới bằng cách gọi start(), thứ này lại gọi phương thức run().

Ví dụ

#!/usr/bin/python
import threading
import time

exitFlag = 0

class myThread(threading.Thread):
    def __init__(self, threadID, name, counter):
        threading.Thread.__init__(self)
        self.threadID = threadID
        self.name = name
        self.counter = counter

    def run(self):
        print "Starting " + self.name
        print_time(self.name, 5, self.counter)
        print "Exiting " + self.name

def print_time(threadName, counter, delay):
    while counter:
        if exitFlag:
            threadName.exit()
        time.sleep(delay)
        print "%s: %s" % (threadName, time.ctime(time.time()))
        counter -= 1

# Tạo luồng mới
thread1 = myThread(1, "Thread-1", 1)
thread2 = myThread(2, "Thread-2", 2)

# Khởi động luồng mới
thread1.start()
thread2.start()

print "Exiting Main Thread"

Khi mã trên được thực thi, nó cho kết quả sau:

Starting Thread-1
Starting Thread-2
Exiting Main Thread
Thread-1: Thu Mar 21 09:10:03 2013
Thread-1: Thu Mar 21 09:10:04 2013
Thread-2: Thu Mar 21 09:10:04 2013
Thread-1: Thu Mar 21 09:10:05 2013
Thread-1: Thu Mar 21 09:10:06 2013
Thread-2: Thu Mar 21 09:10:06 2013
Thread-1: Thu Mar 21 09:10:07 2013
Exiting Thread-1
Thread-2: Thu Mar 21 09:10:08 2013
Thread-2: Thu Mar 21 09:10:10 2013
Thread-2: Thu Mar 21 09:10:12 2013
Exiting Thread-2