menuTicketing

Pustaka Ticketing untuk Python

GitHub

Repositori

bash

Contoh

Contoh Dasar

API berbasis asyncio. Terhubung ke satu server, memperoleh key, lalu langsung melepaskannya.

python
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 Konkurensi (Lock Terdistribusi)

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.

python
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.