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

The Threading Module ใน Python - โมดูลเธรดดิ้ง

โมดูล threading ใหม่กว่าที่มาพร้อม Python 2.4 ให้การสนับสนุนเธรดระดับสูง (high-level) ที่ทรงพลังกว่าโมดูล thread มาก

โมดูล threading เปิดเผยเมธอดทั้งหมดของโมดูล thread และเพิ่มเมธอดพิเศษ:

  • threading.activeCount() - คืนจำนวน thread objects ที่ active
  • threading.currentThread() - คืน thread object ของ caller's thread control
  • threading.enumerate() - คืนรายการ thread objects ที่ active ทั้งหมด

นอกจากนี้ threading module มีคลาส Thread ที่นำ threading ไปใช้งาน เมธอดของคลาส Thread:

  • run() - จุดเข้าสู่ thread
  • start() - เริ่ม thread โดยเรียก run method
  • join([time]) - รอให้ thread จบการทำงาน
  • isAlive() - ตรวจสอบว่า thread ยังทำงานอยู่หรือไม่
  • getName() - คืนชื่อของ thread
  • setName() - ตั้งชื่อของ thread

การสร้าง Thread ด้วย Threading Module

  1. กำหนด subclass ใหม่ของคลาส Thread
  2. Override เมธอด __init__(self [,args]) เพื่อเพิ่มอาร์กิวเมนต์
  3. Override เมธอด run(self [,args]) เพื่อกำหนดงานที่ thread ควรทำเมื่อเริ่ม

หลังจากสร้าง Thread subclass ใหม่แล้ว สร้างอินสแตนซ์และเริ่ม thread ใหม่ด้วย 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