ExecutorLease

class ExecutorLease(*, manager, lease_id, owner, lease_seconds, grace_seconds, leased_at)[source]

Bases: object

Lease object returned by LeasedExecutorManager.acquire().

Parameters:
property soft_expires_at: float
property hard_expires_at: float
async run(fn, /, *args, **kwargs)[source]

Run a synchronous callable in this leased executor.

Return type:

Any

Parameters:
async release()[source]
Return type:

None

Manual summary

lease.lease_id

Unique lease identifier.

lease.owner

Optional owner label.

lease.lease_seconds

Requested soft lease lifetime.

lease.grace_seconds

Extra time before hard revocation.

lease.leased_at

Monotonic timestamp when the lease was created.

lease.executor

Safe executor proxy. It supports submit() but rejects direct shutdown() and submissions after release or revocation.

lease.soft_expires_at

Monotonic timestamp for soft expiry.

lease.hard_expires_at

Monotonic timestamp for hard expiry.

await lease.run(fn, *args, **kwargs)

Run a synchronous callable in the leased executor and await its result.

await lease.release()

Return the lease. Calling it more than once is safe.

Async context manager

async with await manager.acquire(owner="job") as lease:
    result = await lease.run(sync_function)