Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Đối tượng Barrier (Rào chắn) đồng bộ hóa luồng trong Python

Barrier là kỹ thuật đồng bộ hóa: nhiều thread chờ tại một điểm chung (barrier point) cho đến khi đủ số lượng thread quy định, sau đó cùng được giải phóng để tiếp tục thực thi.

Khởi tạo Barrier

import threading
b = threading.Barrier(parties, action=None, timeout=None)
  • parties: Số thread cần đạt đến barrier
  • action: Callable được gọi bởi một thread khi barrier được giải phóng
  • timeout: Timeout mặc định cho wait()

Thuộc tính và phương thức

partiesSố thread yêu cầu (read-only)
n_waitingSố thread đang chờ
brokenTrue nếu barrier bị phá vỡ
wait(timeout=None)Chờ đến khi đủ parties hoặc timeout. Trả về index (0 đến parties-1)
reset()Đặt lại trạng thái ban đầu. Thread đang chờ nhận BrokenBarrierError
abort()Đưa barrier vào trạng thái broken. Tất cả wait().fail với BrokenBarrierError

Ví dụ: Cuộc đua barrier

from random import randrange
from threading import Barrier, Thread
from time import ctime, sleep

num = 4  # 4 thread cần đạt barrier
b = Barrier(num)
names = ['India', 'Japan', 'USA', 'China']

def player():
    name = names.pop()
    sleep(randrange(2, 5))
    print('%s reached the barrier at: %s \n' % (name, ctime()))
    b.wait()

threads = []
print("Race starts now...")
for i in range(num):
    threads.append(Thread(target=player))
    threads[-1].start()

# Đợi tất cả thread hoàn thành
for thread in threads:
    thread.join()

print("All Reached Barrier Point!")

Kết quả mẫu

Race starts now...
India reached the barrier at: Fri Jan 18 14:07:44 2019
China reached the barrier at: Fri Jan 18 14:07:44 2019
Japan reached the barrier at: Fri Jan 18 14:07:46 2019
USA reached the barrier at: Fri Jan 18 14:07:46 2019
All Reached Barrier Point!

Ứng dụng thực tế

  • Đồng bộ khởi tạo: Đợi tất cả service sẵn sàng trước khi bắt đầu
  • Map-Reduce: Đợi phase map hoàn tất trước khi reduce
  • Game multiplayer: Đợi đủ người chơi trước khi bắt đầu trận đấu
  • Pipeline xử lý: Đồng bộ các stage xử lý song song