โมดูลเธรดที่มาพร้อมกับ Python มีกลไกการล็อกที่ง่ายต่อการใช้งาน ซึ่งช่วยให้คุณสามารถซิงโครไนซ์เธรดได้ ล็อกใหม่ถูกสร้างขึ้นโดยการเรียกเมธอด Lock() ซึ่งจะคืนค่าล็อกใหม่
วิธีการรับ (บล็อก) ของวัตถุล็อคใหม่ใช้เพื่อบังคับให้เธรดทำงานแบบซิงโครนัส พารามิเตอร์การบล็อกที่เป็นตัวเลือกช่วยให้คุณควบคุมได้ว่าเธรดจะรอรับการล็อกหรือไม่
หากการบล็อกถูกตั้งค่าเป็น 0 เธรดจะส่งคืนทันทีด้วยค่า 0 หากไม่สามารถรับการล็อกได้ และมีค่า 1 หากได้รับล็อก หากตั้งค่าการบล็อกเป็น 1 เธรดจะบล็อกและรอให้ปลดล็อค
เมธอด release() ของอ็อบเจ็กต์ล็อกใหม่ใช้เพื่อปลดล็อกเมื่อไม่ต้องการใช้อีกต่อไป
ตัวอย่าง
#!/usr/bin/python import threading import time 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 # Get lock to synchronize threads threadLock.acquire() print_time(self.name, self.counter, 3) # Free lock to release next thread threadLock.release() def print_time(threadName, delay, counter): while counter: time.sleep(delay) print "%s: %s" % (threadName, time.ctime(time.time())) counter -= 1 threadLock = threading.Lock() threads = [] # Create new threads thread1 = myThread(1, "Thread-1", 1) thread2 = myThread(2, "Thread-2", 2) # Start new Threads thread1.start() thread2.start() # Add threads to thread list threads.append(thread1) threads.append(thread2) # Wait for all threads to complete for t in threads: t.join() print "Exiting Main Thread"
เมื่อโค้ดด้านบนถูกรัน มันจะให้ผลลัพธ์ดังต่อไปนี้ −
Starting Thread-1 Starting Thread-2 Thread-1: Thu Mar 21 09:11:28 2013 Thread-1: Thu Mar 21 09:11:29 2013 Thread-1: Thu Mar 21 09:11:30 2013 Thread-2: Thu Mar 21 09:11:32 2013 Thread-2: Thu Mar 21 09:11:34 2013 Thread-2: Thu Mar 21 09:11:36 2013 Exiting Main Thread