โมดูลเธรดที่ใหม่กว่าที่มาพร้อมกับ Python 2.4 ให้การสนับสนุนเธรดระดับสูงและทรงพลังมากกว่าโมดูลเธรดที่กล่าวถึงในส่วนก่อนหน้า
โมดูลเธรดแสดงวิธีการทั้งหมดของโมดูลเธรดและให้วิธีการเพิ่มเติมบางอย่าง -
- threading.activeCount() − ส่งกลับจำนวนของวัตถุเธรดที่ทำงานอยู่
- threading.currentThread() − ส่งกลับจำนวนของวัตถุเธรดในการควบคุมเธรดของผู้เรียก
- threading.enumerate() − ส่งคืนรายการออบเจ็กต์เธรดทั้งหมดที่ทำงานอยู่ในขณะนี้
นอกเหนือจากเมธอด โมดูลเธรดยังมีคลาสเธรดที่ใช้เธรด วิธีการที่ให้โดยคลาสเธรดมีดังนี้ −
- เรียกใช้() − เมธอด run() เป็นจุดเริ่มต้นสำหรับเธรด
- เริ่ม () − เมธอด start() เริ่มต้นเธรดโดยเรียกใช้เมธอด run
- เข้าร่วม ([เวลา]) − การ join() รอให้เธรดสิ้นสุด
- isAlive() − isAlive() วิธีการตรวจสอบว่าเธรดยังคงทำงานอยู่หรือไม่
- getName() − เมธอด getName() จะคืนค่าชื่อเธรด
- setName() − setName() วิธีการตั้งชื่อเธรด
การสร้างเธรดโดยใช้โมดูลเธรด
หากต้องการใช้งานเธรดใหม่โดยใช้โมดูลเธรด คุณต้องทำสิ่งต่อไปนี้ −
- กำหนดคลาสย่อยใหม่ของคลาสเธรด
- แทนที่เมธอด __init__(self [,args]) เพื่อเพิ่มอาร์กิวเมนต์เพิ่มเติม
- จากนั้น ให้แทนที่เมธอด run(self [,args]) เพื่อนำสิ่งที่เธรดควรทำเมื่อเริ่มทำงาน
เมื่อคุณสร้างคลาสย่อยของเธรดใหม่แล้ว คุณสามารถสร้างอินสแตนซ์ของคลาสนั้นแล้วเริ่มเธรดใหม่โดยเรียกใช้ start() ซึ่งจะเป็นการเรียกใช้เมธอด run()
ตัวอย่าง
#!/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 # Create new threads thread1 = myThread(1, "Thread-1", 1) thread2 = myThread(2, "Thread-2", 2) # Start new Threads thread1.start() thread2.start() print "Exiting Main Thread"
เมื่อโค้ดด้านบนถูกรัน มันจะให้ผลลัพธ์ดังต่อไปนี้ −
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