API berbasis asyncio. Terhubung ke satu server, memperoleh key, lalu langsung melepaskannya.
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()Contoh yang memverifikasi bahwa, meskipun banyak task asyncio melakukan setor/tarik berulang kali dengan saling mengeksklusi menggunakan lock per akun, saldo akhirnya selalu kembali ke nilai awal. Dengan async with ticket, key akan otomatis dilepaskan saat keluar dari blok.
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)Lihat contoh lengkapnya di test_example.py, test_bank.py, test_bench.py.