Computer >> Máy Tính >  >> Lập trình >> Python

Đồng bộ hóa các chủ đề trong Python

Mô-đun phân luồng được cung cấp với Python bao gồm cơ chế khóa đơn giản để triển khai cho phép bạn đồng bộ hóa các luồng. Một khóa mới được tạo bằng cách gọi phương thức Lock (), phương thức này sẽ trả về khóa mới.

Phương thức thu được (chặn) của đối tượng khóa mới được sử dụng để buộc các luồng chạy đồng bộ. Tham số chặn tùy chọn cho phép bạn kiểm soát xem chuỗi có đợi để lấy khóa hay không.

Nếu chặn được đặt thành 0, chuỗi sẽ trả về ngay lập tức với giá trị 0 nếu không thể lấy được khóa và với giá trị 1 nếu đã có khóa. Nếu chặn được đặt thành 1, chuỗi sẽ chặn và đợi khóa được giải phóng.

Phương thức release () của đối tượng khóa mới được sử dụng để giải phóng khóa khi nó không còn được yêu cầu.

Ví dụ

#!/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"

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau -

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