38 lines
897 B
Python
38 lines
897 B
Python
import types
|
|
import typing as tp
|
|
from threading import Lock as T_LOCK
|
|
|
|
import anyio
|
|
|
|
|
|
class AsyncLock:
|
|
def __init__(self) -> None:
|
|
self._lock = anyio.Lock()
|
|
|
|
async def __aenter__(self) -> None:
|
|
await self._lock.acquire()
|
|
|
|
async def __aexit__(
|
|
self,
|
|
exc_type: tp.Optional[tp.Type[BaseException]] = None,
|
|
exc_value: tp.Optional[BaseException] = None,
|
|
traceback: tp.Optional[types.TracebackType] = None,
|
|
) -> None:
|
|
self._lock.release()
|
|
|
|
|
|
class Lock:
|
|
def __init__(self) -> None:
|
|
self._lock = T_LOCK()
|
|
|
|
def __enter__(self) -> None:
|
|
self._lock.acquire()
|
|
|
|
def __exit__(
|
|
self,
|
|
exc_type: tp.Optional[tp.Type[BaseException]] = None,
|
|
exc_value: tp.Optional[BaseException] = None,
|
|
traceback: tp.Optional[types.TracebackType] = None,
|
|
) -> None:
|
|
self._lock.release()
|