跳转到主要内容

一种'dogpile'锁,通常用作更大缓存解决方案的组件

项目描述

一种“dogpile”锁,允许单个线程在生成昂贵资源的同时,其他线程使用“旧”值,直到“新”值准备就绪。

Dogpile基本上是从Beaker包中提取的锁定代码,用于简单和通用用途。

用法

一个简单的示例

from dogpile.core import Dogpile

# store a reference to a "resource", some
# object that is expensive to create.
the_resource = [None]

def some_creation_function():
    # create the resource here
    the_resource[0] = create_some_resource()

def use_the_resource():
    # some function that uses
    # the resource.  Won't reach
    # here until some_creation_function()
    # has completed at least once.
    the_resource[0].do_something()

# create Dogpile with 3600 second
# expiry time
dogpile = Dogpile(3600)

with dogpile.acquire(some_creation_function):
    use_the_resource()

上面,some_creation_function()将在第一次调用Dogpile.acquire()时被调用。然后继续执行with块的其余部分。在此初始期间调用Dogpile.acquire()的并发线程将被阻塞,直到some_creation_function()完成。

一旦创建函数第一次成功完成,对Dogpile.acquire()的新调用将在“expiretime”到达时每次调用some_creation_function(),允许只有一个线程调用该函数。在此期间调用Dogpile.acquire()的并发线程将直接通过,而不会被阻塞。预计在此期间,资源的“过时”版本仍然可用,而新的一个正在生成。

dogpile.core是dogpile.cache包的核心,该包提供基于dogpile概念的基本缓存API和示例后端。

开发状态

dogpile.core已在少数生产环境中使用了一段时间,截至0.3.2版本已进入测试版状态。尚未报告任何关于其核心同步模型的问题,整体上项目没有太多变化。大部分开发仍在dogpile.cache中进行。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分发

dogpile.core-0.4.1.tar.gz (99.6 kB 查看哈希值)

上传时间 源代码

支持者