django 的BaseMemcachedCache线程安全问题

本文分析了 Django 中使用 python-memcached 实现缓存时存在的线程安全问题,具体表现为 _cache 属性的初始化过程中未加锁可能导致多次初始化。
注意,django.core.cache.backends.memcached import BaseMemcachedCache 的_cache存在线程安全问题,请看他的代码:

mc_client
class MemcachedCache(BaseMemcachedCache):
"An implementation of a cache binding using python-memcached"
def __init__(self, server, params):

super(MemcachedCache, self).__init__(server, params,
library=memcache,
value_not_found_exception=ValueError)
@property
def _cache(self):
"""
Implements transparent thread-safe access to a memcached client.
"""
global mc_client
if mc_client is None:
mc_client = self._lib.Client(self._servers)

return mc_client


self._lib.Client(self._servers)可能被初始化多次,因为没有加锁。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值