python-memcached包使用方法

本文转载自:http://my.oschina.net/flynewton/blog/10660

将memcached.pyc拷贝到工作目录

1 #!/usr/bin/env python
2
3 import memcache
4
5 mc = memcache.Client([‘127.0.0.1:12000‘],debug=0)
6 mc.set("foo","bar")
7 value = mc.get("foo")
8 print value

输出得到bar

4.Python-memcached API总结

主要方法如下:

1 @set(key,val,time=0,min_compress_len=0)

无条件键值对的设置,其中的time用于设置超时,单位是秒,而min_compress_len则用于设置zlib压缩(注:zlib是提供数据压缩用的函式库)

@set_multi(mapping,time=0,key_prefix=‘‘,min_compress_len=0)

设置多个键值对,key_prefix是key的前缀,完整的键名是key_prefix+key, 使用方法如下

1   >>> mc.set_multi({‘k1‘ : 1, ‘k2‘ : 2}, key_prefix=‘pfx_‘) == []
2
3   >>> mc.get_multi([‘k1‘, ‘k2‘, ‘nonexist‘], key_prefix=‘pfx_‘) == {‘k1‘ : 1, ‘k2‘ : 2}

@add(key,val,time=0,min_compress_len=0)

添加一个键值对,内部调用_set()方法

@replace(key,val,time=0,min_compress_len=0)

替换value,内部调用_set()方法

@get(key)

根据key去获取value,出错返回None

@get_multi(keys,key_prefix=‘‘)

获取多个key的值,返回的是字典。keys为key的列表

@delete(key,time=0)

删除某个key。time的单位为秒,用于确保在特定时间内的set和update操作会失败。如果返回非0则代表成功

@incr(key,delta=1)

自增变量加上delta,默认加1,使用如下

1 >>> mc.set("counter", "20")
2
3 >>> mc.incr("counter")
4
5 21
6
7 @decr(key,delta=1)

自减变量减去delta,默认减1

5._set方法

很多方法内部都调用了_set方法,其源码如下:

注: memcached 的客户端使用TCP链接与服务器通讯, 一个运行中的memcached服务器监视一些端口, 客户端连接这些端口,发送命令到服务器,读取回应,最后关闭连接。(具体命令请参考《Memcached 协议中文版》)

6.python-memcached线程安全

python-memcached是不是线程安全的

答案是肯定的,为什么我们需要线程安全的memcached client,因为我们的实际应用一般是多线程的模型,例如cherrypy、twisted,如果python-memcached不是线程安全的话,引起的问题不仅仅是并发修改共享变量这么简单,是外部socket链接的数据流的混乱

python-memcached怎么实现线程安全的呢?查看源代码看到

1 try:
2     # Only exists in Python 2.4+
3     from threading import local
4 except ImportError:
5     # TODO:  add the pure-python local implementation
6     class local(object):
7         pass
8
9 class Client(local):

很取巧的让Client类继承threading.local,也就是Client里面的每一个属性都是跟当前线程绑定的。实现虽然不太优雅,但是很实在。但是别以为这样就可以随便在线程里面用python-memcached了,因为这种thread local的做法,你的应用必须要使用thread pool的模式,而不能不停创建销毁thread,因为每一个新线程的创建,对于就会使用一个全新的Client,也就是一个全新的socket链接,如果不停打开创建销毁thread的话,就会导致不停的创建销毁socket链接,导致性能大量下降。幸好,无论是cherrypy还是twisted,都是使用了thread pool的模式

时间: 2024-11-09 00:58:49

python-memcached包使用方法的相关文章

<PY>Python扩展包安装方法(待更新)

1.从官网下载对应版本的exe或者msi双击安装. 2.安装setuptools,并且配置PATH环境变量 c:\Python\Scripts   后使用easy_install或者pip工具安装并自动解决依赖关系. 例如 easy_install numpy或者pip install numpy 3.在 http://www.lfd.uci.edu/~gohlke/pythonlibs/ 找到第三方编译的whl包使用wheel工具安装 4.从github下载zip,tar.gz等压缩包解压后进

CentOS 5.4 制作 Python 2.6 RPM 包的方法

不知道什么原因,CentOS 5.4 了,默认的Python的版本还是2.4的. 但是Python在CentOS里面的又非常的重要,可是 2.4版本的Python有很多的模块没有,最新的Python 2.6版本增加了很多高级特征.所以,很有必要进行升级. 升级的方法很多种,一种就是直接RPM了,还有一种就是 源代码的方式方式,源代码的确不错,可是麻烦啊,还要编译,相当的麻烦. 我在网上找了下如何在 CentOS 5.4 下面创建 Python 2.6 的RPM包的方法,特写上来 1. 在官网下载

【数学建模】线性规划各种问题的Python调包方法

关键词:Python.调包.线性规划.指派问题.运输问题.pulp.混合整数线性规划(MILP) 注:此文章是线性规划的调包实现,具体步骤原理请搜索具体解法.   本文章的各个问题可能会采用多种调用方法,为什么?因为这些包各有特点,有些语法特别像matlab,只要稍稍改变即可达成代码交换:而有些包利用了python本身的特性,在灵活度与代码的可读性上更高.我认为这些包各有优劣,各位各持所需吧.   看了本文章能做到什么?你可以在本文章内学到线性规划的几个问题的求解方式,并学会如何用pulp包解决

Windows系统下Python与NumPy安装方法

Windows系统下Python与NumPy安装方法 Windows下Python的某些第三方包安装步骤实在是太麻烦了(这里主要以NumPy为例,目前只有遇到安装它的时候出现了很多问题),晚上花了好几个小时才把NumPy科学计算包安装好,在这里描述下安装过程,避免大家走没有必要的弯路. 1,安装Python 首先,运行下载的MSI安装包,选择安装组件时,确保勾上了所有的组件. 特别要注意选上pip和Add python.exe to Path,然后多次点击Next即可完成安装. Python解释

可以进行自动补全的python的eclipse配置方法

/*********************************************************************  * Author  : Samson  * Date    : 05/21/2014  * Test platform:  *              Mint 15-3.8.13.13  *              GNU bash, version 4.2.45  * ***************************************

CentOS中Python pip包管理工具的安装和使用

Python有很多第三方的模块或包,要管理这些包,有很多方法.python的pip包管理工具,类似与CentOS中yum,使用该工具安装Python包非常方便. 从Python内部来说,pip 是一个安装和管理 Python 包的工具 , 是 easy_install 的一个替换品.distribute是setuptools的取代(Setuptools包后期不再维护了),pip是easy_install的取代. pip的安装前需要setuptools 或者 distribute,如果你使用的是P

Python第三方包的安装

不得不说我又变懒了,过个年都懒得学习了 之前不太明白包的管理,都是用一个搜一下 今天总结一下 python第三方包安装的两种方式 下载源码然后setup.py安装 用pip进行安装 第一种方法 在网上找到需要的包,下载解压,找到setup.py cmd切换到包的目录,输入python setup.py install 第二种方法 cmd切换到Python27\Scripts目录 敲入pip install xxx(包名)

Python的包管理工具Pip (zz )

Python的包管理工具Pip 接触了Ruby,发现它有个包管理工具RubyGem很好用,并且有很完备的文档系统http://rdoc.info 发现Python下也有同样的工具,包括easy_install和Pip.不过,我没有细看easy_install的方法,这就简单的介绍一下Pip的安装与使用: 准备: $ curl -O http://python-distribute.org/distribute_setup.py $ python distribute_setup.py 安装: $

关于python的包

参考文献:http://blog.sina.com.cn/s/blog_615c388d01017b5o.html 注:本文大多对上连接的整理,仅用于学习,望博主见谅.转载请附上上述链接. 为什么要包? python中的Module是比较重要的概念.常见的情况是,事先写好一个.py文 件,在另一个文件中需要import时,将事先写好的.py文件拷贝 到当前目录,或者是在sys.path中增加事先写好的.py文件所在的目录,然后import.这样的做法,对于少数文件是可行的,但如果程序数目很 多,

linux和windows下安装python拓展包及requirement.txt安装类库

http://blog.csdn.net/pipisorry/article/details/39902327 python拓展包安装 直接安装拓展包默认路径: Unix(Linux)默认路径:/usr/local/lib/pythonX.Y/site-packagesWindows默认路径:C:\PythonXY\Lib\site-packages 測试和升级python拓展安装包pip 查看pip安装时相应的python版本号 which pip /d/python3.4.2/Scripts