Simplifying concurrency with granular lock management.
Project description
slock
slock 是一个用于简化并发控制的 Python 库,提供基于键的粒度锁管理。它利用 BaseKey 类为不同的键创建独立的锁,确保线程安全。通过上下文管理器
lock,可以轻松地在多线程环境中控制资源的访问。
特性
- 基于键的粒度锁管理:为不同的键创建独立锁,避免资源竞争。
- 线程安全:确保在多线程环境下对资源的安全访问。
- 简单易用:通过上下文管理器
lock,无需显式管理锁的获取和释放。 - 高效:使用
WeakValueDictionary来存储锁,避免内存泄漏。
安装
通过 pip 安装:
pip install slock
使用示例
简单示例
from slock import BaseKey, lock
# 自定义键
class MyKey(BaseKey):
"""
使用类和初始化时的 key 作为锁的唯一标识。
当类和 key 完全相同时,线程会等待锁释放才能继续执行。
类名和 key 的组合用于生成锁的标识符,不涉及引用关系,主要用于区分不同资源。
"""
pass
# 创建一个键对象
my_key = MyKey(key="resource_1") #key 用于唯一标识一个资源。它是锁的最小单元,可以为空,默认情况下 key 为 None,此时锁的标识由类名生成。
# 使用锁来同步访问资源
with lock(my_key):
# 你的并发操作代码
print("Accessing resource_1 safely")
使用 slock 解决竞争
from slock import BaseKey, lock
import threading
# 定义资源键
class ResourceKey(BaseKey):
"""
使用类和初始化时的 key 作为锁的唯一标识。
当类和 key 完全相同时,线程会等待锁释放才能继续执行。
类名和 key 的组合用于生成锁的标识符,不涉及引用关系,主要用于区分不同资源。
"""
pass
# 共享资源
shared_resource = 0
# 模拟线程安全的资源增加
def increment():
global shared_resource
with lock(ResourceKey("shared_resource")): # 创建资源键 使用锁避免竞争
shared_resource += 1
# 存储线程
threads: list[threading] = []
# 创建并启动多个线程
for i in range(10000):
thread: threading = threading.Thread(target=increment)
thread.start()
threads.append(thread)
# 等待所有线程完成
for thread in threads:
thread.join()
# 输出最终的结果
print(f"最终共享资源的值:{shared_resource}")
使用async
from slock.async_lock import lock, get_lock
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
slock-0.0.2.tar.gz
(4.0 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
slock-0.0.2-py3-none-any.whl
(4.7 kB
view details)
File details
Details for the file slock-0.0.2.tar.gz.
File metadata
- Download URL: slock-0.0.2.tar.gz
- Upload date:
- Size: 4.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e888a9f63efc838118c6c676407ba3a23684444a90069e093ceea4ae05df5667
|
|
| MD5 |
4e8540f06101871ad3ad0e202560855c
|
|
| BLAKE2b-256 |
de8301fa9a43ecc8240ec1c8f7abebcac2f9b80b3bc5bcd5a05f33369c9d64d0
|
File details
Details for the file slock-0.0.2-py3-none-any.whl.
File metadata
- Download URL: slock-0.0.2-py3-none-any.whl
- Upload date:
- Size: 4.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
97de64a8968138ef9e3988a7102cd5cd331c5be48c33eeb1814587db91bc4080
|
|
| MD5 |
e38d7579d68e5ece941c8555cdad0f5c
|
|
| BLAKE2b-256 |
6fe8560bc1e7f4cbd8e238446aeb6005ff3f574a9233dc4dcba68cc4922f6da3
|