Mô-đun threading đi kèm với Python bao gồm một cơ chế khóa đơn giả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(), trả về khóa mới.
Phương thức acquire(blocking) của đối tượng khóa mới được dùng để buộc các luồng chạy đồng bộ. Tham số tùy chọn blocking cho phép bạn kiểm soát việc luồng có chờ để lấy khóa hay không.
Nếu blocking được đặt là 0, luồng trả về ngay lập tức với giá trị 0 nếu không thể lấy khóa và 1 nếu khóa đã được lấy. Nếu blocking là 1, luồng sẽ chờ và đợi khóa được giải phóng.
Phương thức release() của đối tượng khóa mới được dùng để giải phóng khóa khi không còn cần thiết.
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
# Lấy khóa để đồng bộ hóa luồng
threadLock.acquire()
print_time(self.name, self.counter, 3)
# Giải phóng khóa để luồng tiếp theo chạy
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 = []
# Tạo luồng mới
thread1 = myThread(1, "Thread-1", 1)
thread2 = myThread(2, "Thread-2", 2)
# Khởi động luồng mới
thread1.start()
thread2.start()
# Thêm luồng vào danh sách
threads.append(thread1)
threads.append(thread2)
# Chờ tất cả luồng hoàn thành
for t in threads:
t.join()
print "Exiting Main Thread"
Khi mã trên được thực thi, nó cho 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