Computer >> Máy Tính >  >> Lập trình >> Python

Mô-đun phân luồng bằng Python

Mô-đun luồng mới hơn được bao gồm trong Python 2.4 cung cấp hỗ trợ cấp cao, mạnh mẽ hơn nhiều cho các luồng so với mô-đun luồng được thảo luận trong phần trước.

Mô-đun luồng hiển thị tất cả các phương thức của mô-đun luồng và cung cấp một số phương thức bổ sung -

  • threading.activeCount () - Trả về số lượng đối tượng luồng đang hoạt động.
  • threading.currentThread () - Trả về số lượng đố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ả các đối tượng luồng hiện đang hoạt động.

Ngoài các phương thức, mô-đun phân luồng có lớp Luồng thực hiện phân luồng. Các phương thức được cung cấp bởi lớp Thread như sau -

  • run () - Phương thức run () là điểm vào của một luồng.
  • start () - Phương thức start () bắt đầu một chuỗi bằng cách gọi phương thức run.
  • tham gia ([thời gian]) - Tham gia () đợi các chuỗi kết thúc.
  • isAlive () - Phương thức isAlive () kiểm tra xem một luồng có còn đang thực thi hay không.
  • getName () - Phương thức getName () trả về tên của một chuỗi.
  • setName () - Phương thức setName () đặt tên của một luồng.

Tạo chuỗi bằng mô-đun phân luồng

Để triển khai một luồng mới bằng cách sử dụng mô-đun luồng, bạn phải làm như sau -

  • Xác định một lớp con mới của lớp Luồng.
  • Ghi đè phương thức __init __ (self [, args]) để thêm các đối số bổ sung.
  • Sau đó, ghi đè phương thức run (self [, args]) để triển khai những gì chuỗi sẽ làm khi bắt đầu.

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

Ví dụ

 #! / usr / bin / pythonimport threadingimport timeexitFlag =0class 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 "Đang bắt đầu" + self.name print_time (self.name, 5, self.counter) print "Thoát" + self.nameef 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ớithread1 =myThread (1, "Thread-1", 1) thread2 =myThread (2, "Thread-2", 2) # Bắt đầu mới Threadsthread1.start () thread2.start () print "Thoát khỏi Chuỗi chính" 

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau -

 Bắt đầu chủ đề-1 Bắt đầu chủ đề-2Exiting Chủ đề chínhThread-1:Thu Mar 21 09:10:03 2013Thread-1:Thu Mar 21 09:10:04 2013Thread-2:Thu Mar 21 09:10:04 2013Thread-1 :Thu Mar 21 09:10:05 2013Thread-1:Thu Mar 21 09:10:06 2013Thread-2:Thu Mar 21 09:10:06 2013Thread-1:Thu Mar 21 09:10:07 2013Exiting Thread-1Thread- 2:Thứ Ba ngày 21 tháng 3 09:10:08 2013