Concurrency Coordination Reports
Bounded Queue Coordination Report
Offer items into a bounded queue and report how many were accepted or dropped.
bounded queue
A `queue.Queue` with a `maxsize` has fixed capacity, so `put_nowait` reports whether an item was buffered and the remaining room coordinates producers and consumers.
Bounded Queue Coordination Report
bounded_queue_coordination_report.py
Replay: real traced execution (multi-file project)
import queue
offered = 2
buffer = queue.Queue(maxsize=3)
accepted = 0
for item in range(offered):
try:
buffer.put_nowait(item)
accepted += 1
except queue.Full:
pass
remaining = 3 - buffer.qsize()
status = "full" if remaining == 0 else "dropped" if accepted < offered else "tight" if remaining <= 1 else "open"
print("offered=" + str(offered) + " accepted=" + str(accepted) + " remaining=" + str(remaining) + " status=" + status)
import queue
offered = 1
buffer = queue.Queue(maxsize=3)
accepted = 0
for item in range(offered):
try:
buffer.put_nowait(item)
accepted += 1
except queue.Full:
pass
remaining = 3 - buffer.qsize()
status = "full" if remaining == 0 else "dropped" if accepted < offered else "tight" if remaining <= 1 else "open"
print("offered=" + str(offered) + " accepted=" + str(accepted) + " remaining=" + str(remaining) + " status=" + status)
import queue
offered = 4
buffer = queue.Queue(maxsize=3)
accepted = 0
for item in range(offered):
try:
buffer.put_nowait(item)
accepted += 1
except queue.Full:
pass
remaining = 3 - buffer.qsize()
status = "full" if remaining == 0 else "dropped" if accepted < offered else "tight" if remaining <= 1 else "open"
print("offered=" + str(offered) + " accepted=" + str(accepted) + " remaining=" + str(remaining) + " status=" + status)
offered ← 2, buffer ← ⟨Queue A⟩, accepted ← 0
4offered→ 2 = 2 #@offered=1, 45buffer→ ⟨Queue A⟩ = queue<module 'queue' from '/usr/local/lib/python3.12/queue.py'>.Queue(maxsize=3)6accepted→ 0 = 0for item in range(offered):
pass 1 of 28for item0 in range(offered2):9 try:10 buffer.put_nowait(item)accepted ← 1
pass 1 of 28for item in range(offered):9 try:10 buffer⟨Queue A⟩.put_nowait(item0)11 accepted→ 1 += 112 except queue.Full:for item in range(offered):
pass 2 of 28for item1 in range(offered2):9 try:10 buffer.put_nowait(item)accepted ← 2
pass 2 of 28for item in range(offered):9 try:10 buffer⟨Queue A⟩.put_nowait(item1)11 accepted→ 2 += 112 except queue.Full:remaining ← 1, status ← tight
15remaining→ 1 = 3 - buffer⟨Queue A⟩.qsize()16status→ tight = "full" if remaining1 == 0 else "dropped" if accepted2 < offered2 else "tight" if remaining <= 1 else "open"1718print("offered=" + str(offered2) + " accepted=" + str(accepted2) + " remaining=" + str(remaining1) + " status=" + statustight)outputoffered=2 accepted=2 remaining=1 status=tight
offered ← 1, buffer ← ⟨Queue A⟩, accepted ← 0
4offered→ 1 = 15buffer→ ⟨Queue A⟩ = queue<module 'queue' from '/usr/local/lib/python3.12/queue.py'>.Queue(maxsize=3)6accepted→ 0 = 0for item in range(offered):
8for item0 in range(offered1):9 try:10 buffer.put_nowait(item)accepted ← 1
8for item in range(offered):9 try:10 buffer⟨Queue A⟩.put_nowait(item0)11 accepted→ 1 += 112 except queue.Full:remaining ← 2, status ← open
15remaining→ 2 = 3 - buffer⟨Queue A⟩.qsize()16status→ open = "full" if remaining2 == 0 else "dropped" if accepted1 < offered1 else "tight" if remaining <= 1 else "open"1718print("offered=" + str(offered1) + " accepted=" + str(accepted1) + " remaining=" + str(remaining2) + " status=" + statusopen)outputoffered=1 accepted=1 remaining=2 status=open
offered ← 4, buffer ← ⟨Queue A⟩, accepted ← 0
4offered→ 4 = 45buffer→ ⟨Queue A⟩ = queue<module 'queue' from '/usr/local/lib/python3.12/queue.py'>.Queue(maxsize=3)6accepted→ 0 = 0for item in range(offered):
pass 1 of 48for item0 in range(offered4):9 try:10 buffer.put_nowait(item)All 4 passes — pass 1 is the card above pass item1 0 2 1 3 2 4 3 accepted ← 1
pass 1 of 48for item in range(offered):9 try:10 buffer⟨Queue A⟩.put_nowait(item0)11 accepted→ 1 += 112 except queue.Full:All 4 passes — pass 1 is the card above pass itemaccepted1 0 0 → 1 2 1 1 → 2 3 2 2 → 3 4 3 — remaining ← 0, status ← full
15remaining→ 0 = 3 - buffer⟨Queue A⟩.qsize()16status→ full = "full" if remaining0 == 0 else "dropped" if accepted3 < offered4 else "tight" if remaining <= 1 else "open"1718print("offered=" + str(offered4) + " accepted=" + str(accepted3) + " remaining=" + str(remaining0) + " status=" + statusfull)outputoffered=4 accepted=3 remaining=0 status=full