Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โมดูลเธรดใน Python


โมดูลเธรดที่ใหม่กว่าที่มาพร้อมกับ 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