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

การซิงโครไนซ์เธรดใน Python


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