python线程安全对象cach

2024-06-26 18:05:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经实现了一个python web服务器。每个http请求生成一个新线程。 我需要在内存中缓存对象,因为它是一个web服务器,所以我希望缓存是线程安全的。python中是否有线程安全对象缓存的标准实现?我发现了

http://freshmeat.net/projects/lrucache/

这看起来不是线程安全的。有谁能给我介绍一下python中线程安全缓存的一个很好的实现吗?

谢谢!


Tags: 对象内存服务器webhttp标准net线程
3条回答

在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

它使用读/写锁进行锁定。

每次请求的线程数通常是个坏主意。如果你的服务器在负载方面遇到了巨大的峰值,它会让服务器崩溃。考虑使用一个线程池,该线程池可以在峰值使用期间增长到有限的大小,并在负载较轻时收缩到较小的大小。

您可能想改用memcached。它非常快,非常稳定,非常受欢迎,有很好的python库,如果您需要:

http://www.danga.com/memcached/

相关问题 更多 >