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

Đối tượng rào cản trong Python

Barrier cung cấp một trong những kỹ thuật đồng bộ hóa python mà với đó, một hoặc nhiều luồng sẽ đợi cho đến một điểm trong tập hợp các hoạt động và cùng nhau thực hiện.

Để xác định một đối tượng rào cản, hãy “phân luồng. Barrier ”được sử dụng.

 phân luồng.Barrier (bên, hành động =Không có, thời gian chờ =Không có) 

Ở đâu,

  • Party =Số luồng

  • action =được gọi bởi một trong các chuỗi khi chúng được phát hành.

  • timeout =Giá trị thời gian chờ mặc định. Trong trường hợp không có giá trị thời gian chờ nào được chỉ định cho hàm wait (), giá trị thời gian chờ này sẽ được sử dụng.

Các phương thức được đề cập dưới đây được sử dụng bởi lớp Barrier.

Sr.No Phương pháp &Mô tả
1 bữa tiệc
Một số luồng cần thiết để đạt được điểm rào cản chung.
2 n_waiting
Số lượng chủ đề đang chờ trong điểm rào cản chung
3 hỏng
Một giá trị boolean, True- nếu rào cản ở trạng thái bị phá vỡ khác False.
4 chờ (hết giờ =Không có)
Chờ cho đến khi được thông báo hoặc hết thời gian chờ xảy ra. Nếu luồng đang gọi không có được khóa khi phương thức này được gọi, lỗi thời gian chạy sẽ xuất hiện.
Phương thức này giải phóng khóa bên dưới và sau đó chặn cho đến khi nó được đánh thức bởi một lệnh gọi phương thức thông báo () hoặc thông báo_all () cho cùng một biến điều kiện trong một luồng khác hoặc cho đến khi thời gian chờ tùy chọn xảy ra. Sau khi đánh thức hoặc hết thời gian, nó sẽ lấy lại khóa và quay trở lại.
Khi hết giờ đối số là hiện tại chứ không phải là Không có , nó phải là một số dấu phẩy động chỉ định thời gian chờ cho hoạt động tính bằng giây (hoặc phần nhỏ của nó).
5 đặt lại ()
Đặt hoặc trả rào cản về trạng thái mặc định. I.e. trạng thái trống rỗng. Và các chủ đề đang chờ trên đó sẽ nhận được lỗi BrokenBarrierError.
6 Abort ()
Điều này sẽ đưa rào cản vào trạng thái bị phá vỡ. Điều này khiến tất cả các luồng đang hoạt động hoặc bất kỳ lệnh gọi nào trong tương lai chờ () không thành công với BrokenBarrierError.

rào cảnThread.py

 from random import randrangefrom threading import Barrier, Threadfrom time import ctime, sleepnum =4 # 4 thread sẽ cần phải vượt qua rào cản này để được phát hành.b =Barrier (num) names =['India', 'Japan', ' USA ',' China '] def player ():name =names.pop () sleep (randrange (2, 5)) print ('% s đã đạt đến rào cản lúc:% s \ n '% (name, ctime () )) b.wait () thread =[] print ("Cuộc đua bắt đầu ngay bây giờ…") cho tôi trong phạm vi (num):thread.append (Thread (target =player)) thread [-1] .start () "" "Vòng lặp bên dưới cho phép chờ các chuỗi hoàn thành trước khi chuyển sang tập lệnh chính." "" Cho chuỗi trong chuỗi:thread.join () print ("Tất cả các điểm đã đạt đến rào cản!") 

Kết quả

 Cuộc đua bắt đầu ngay bây giờ… Ấn Độ đạt đến rào cản lúc:Thứ sáu ngày 18 tháng 1 14:07:44 2019 đã đạt đến rào cản lúc:Thứ sáu, ngày 18 tháng 1 14:07:46 năm 2019