واجهة برمجية قائمة على asyncio. تتصل بخادم واحد، وتحجز مفتاحًا ثم تعيده فورًا.
broker = TicketBroker.connect("127.0.0.1:5225")
try:
await broker.wait_ready(5)
ticket = await broker.acquire("key", wait=5, lease=30)
await ticket.release()
print("pass")
finally:
broker.close()مثال يتحقق من أن عدة مهام asyncio تُجري إيداعات وسحوبات متكررة عبر قفل خاص بكل حساب دون تعارض، وأن الرصيد يعود دائمًا إلى قيمته الأولية. استخدام async with ticket يعيد المفتاح تلقائيًا عند الخروج من الكتلة.
async def transaction(broker: TicketBroker, account: int, delta: int) -> None:
key = f"account-{account}"
try:
ticket = await broker.acquire(key, WAIT, LEASE)
except Exception as e:
log.error("account %s acquire failed: %s", account, e)
return
async with ticket:
before = BALANCES[account]
await asyncio.sleep(0)
after = before + delta
BALANCES[account] = after
action, sign = ("withdraw", "-") if delta < 0 else ("deposit", "+")
log.info("account %s %s %s$%s -> $%s", account, action, sign, AMOUNT, after)راجع الأمثلة الكاملة في test_example.py, test_bank.py, test_bench.py.