我已经实现了一个python webserver.每个http请求都会生成一个新线程.我需要在内存中缓存对象,因为它是一个Web服务器,我希望缓存是线程安全的.在python中是否存在线程安全对象缓存的标准实现?我找到了以下内容
http://freshmeat.net/projects/lrucache/
这看起来不是线程安全的.有人能指点我在python中实现线程安全缓存吗?
谢谢!
每个请求的线程通常是个坏主意.如果您的服务器遇到巨大的负载峰值,它将使盒子瘫痪.考虑使用可在峰值使用期间增长到有限大小的线程池,并在负载较轻时缩小到较小的大小.
那么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
它使用读/写锁进行锁定.