Concurrency Coordination Reports
Semaphore Capacity Coordination Report
Grant nonblocking requests against a fixed permit pool and report the remaining capacity.
Semaphore Capacity Coordination Report
semaphore_capacity_coordination_report.py
import threading
requests =
permits = threading.Semaphore(3)
granted = 0
for _ in range(requests):
if permits.acquire(blocking=False):
granted += 1
available = 3 - granted
status = "full" if available == 0 else "tight" if available <= 1 else "open"
print("requests=" + str(requests) + " granted=" + str(granted) + " available=" + str(available) + " status=" + status)
import threading
requests =
permits = threading.Semaphore(3)
granted = 0
for _ in range(requests):
if permits.acquire(blocking=False):
granted += 1
available = 3 - granted
status = "full" if available == 0 else "tight" if available <= 1 else "open"
print("requests=" + str(requests) + " granted=" + str(granted) + " available=" + str(available) + " status=" + status)
import threading
requests =
permits = threading.Semaphore(3)
granted = 0
for _ in range(requests):
if permits.acquire(blocking=False):
granted += 1
available = 3 - granted
status = "full" if available == 0 else "tight" if available <= 1 else "open"
print("requests=" + str(requests) + " granted=" + str(granted) + " available=" + str(available) + " status=" + status)
semaphore permits
A `threading.Semaphore` hands out a bounded number of permits, so the permits still available describe how much shared capacity remains.