gpt4 book ai didi

Python 服务文件缓存 Apache 竞态条件

转载 作者:太空宇宙 更新时间:2023-11-03 19:38:42 25 4
gpt4 key购买 nike

我正在编写一个 python 服务(pyamf),用户可以通过它访问图像。所有图像都存储在中央服务器上。 python 服务将在可以通过网络访问服务器的卫星计算机上运行。该服务应按如下方式工作:

  1. 在本地检查该文件是否存在,如果存在,则使用它。
  2. 在本地检查文件当前是否正在从服务器传输(file.part 存在并且大小正在更改)。如果是这样,请等待下载完成,然后使用文件。
  3. 如果文件不存在且未下载文件,则通过 urlretrieve 下载文件。

问题出在 Apache 的多线程上。线程同时到达文件存在检查,因此它们都认为需要下载该文件。不用说,这不好。

处理这种竞争条件的正确方法是什么?

谢谢!

最佳答案

我猜测它要么是线程化的,要么是 fork 的 apache,但效果是相同的,因为它们正在访问远程资源。

这个问题有时被称为“狗堆”问题,它是 Beaker 缓存库解决的问题之一 ( http://beaker.groovie.org )。它提供了一个系统,您可以通过该系统创建一个可调用的“创建”新的缓存值,在本例中,如果值尚不存在,则为与所获取的某些图像相对应的 URL。使用锁定使得并发线程或进程等待被选为“创建者”的单个进程完成其正在执行的操作。如果在类 UNIX 面向多进程的系统上配置,Beaker 将使用锁定文件;如果在 Windows 系统上配置,则 Beaker 将使用互斥体。

我是 Beaker's guts 的原作者,与 Ben Bangert 一起将其打包以便与 Pylons 一起使用。

关于Python 服务文件缓存 Apache 竞态条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1937018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com