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

offered
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)
  1. 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 = 0
  2. for item in range(offered):

    pass 1 of 2
    8for item0 in range(offered2):9    try:10        buffer.put_nowait(item)
  3. accepted ← 1

    pass 1 of 2
    8for item in range(offered):9    try:10        buffer⟨Queue A⟩.put_nowait(item0)11        accepted→ 1 += 112    except queue.Full:
  4. for item in range(offered):

    pass 2 of 2
    8for item1 in range(offered2):9    try:10        buffer.put_nowait(item)
  5. accepted ← 2

    pass 2 of 2
    8for item in range(offered):9    try:10        buffer⟨Queue A⟩.put_nowait(item1)11        accepted→ 2 += 112    except queue.Full:
  6. 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
  1. 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 = 0
  2. for item in range(offered):

    8for item0 in range(offered1):9    try:10        buffer.put_nowait(item)
  3. accepted ← 1

    8for item in range(offered):9    try:10        buffer⟨Queue A⟩.put_nowait(item0)11        accepted→ 1 += 112    except queue.Full:
  4. 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
  1. 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 = 0
  2. for item in range(offered):

    pass 1 of 4
    8for item0 in range(offered4):9    try:10        buffer.put_nowait(item)
    All 4 passes — pass 1 is the card above
    passitem
    10
    21
    32
    43
  3. accepted ← 1

    pass 1 of 4
    8for 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
    passitemaccepted
    100 1
    211 2
    322 3
    43
  4. 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