asyncio ভিত্তিক API। একটি সার্ভারে সংযুক্ত হয়ে একটি কী অর্জন করে সঙ্গে সঙ্গে ফেরত দেওয়া হয়।
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-এ দেখুন।