我已经实现了一个python have服务器。每个http请求产生一个新的线程。我有一个在内存中缓存对象的需求,因为它是一个the服务器,我希望缓存是线程安全的。python中是否有线程安全对象缓存的标准实现?我发现了以下内容
http://freshmeat.net/projects/lrucache/
这看起来不是线程安全的。有没有人能给我一个很好的python线程安全缓存的实现?
谢谢!
发布于 2008-10-18 17:48:05
默认情况下,Python中的许多操作都是线程安全的,所以一个标准的字典应该是可以的(至少在某些方面)。这主要归功于GIL,它将有助于避免一些更严重的线程问题。
这里有一个可能有用的列表:http://coreygoldberg.blogspot.com/2008/09/python-thread-synchronization-and.html。
虽然这些操作的原子性质只是意味着,如果有两个线程同时访问一个字典,则不会有完全不一致的状态。这样你就不会有一个损坏的值。但是,您(与大多数多线程编程一样)不能依赖这些原子操作的特定顺序。
所以长话短说...
如果您有相当简单的需求,并且不关心写入缓存的内容的顺序,那么您可以使用字典,并且知道您将始终获得一致/未损坏的值(它可能已经过期)。
如果你想确保读写的一致性,那么你可能想看看Django的本地内存缓存:
http://code.djangoproject.com/browser/django/trunk/django/core/cache/backends/locmem.py
它使用读/写锁进行锁定。
发布于 2008-10-17 20:39:48
每个请求的线程数通常不是一个好主意。如果您的服务器遇到了负载的巨大峰值,它将使服务器瘫痪。考虑使用一个线程池,它可以在使用高峰时增长到有限的大小,并在负载较轻时缩小到较小的大小。
发布于 2008-10-17 20:18:25
您可能希望改用memcached。它非常快,非常稳定,非常流行,有很好的python库,如果你需要,它将允许你成长为分布式缓存:
http://www.danga.com/memcached/
https://stackoverflow.com/questions/213455
复制相似问题