python
文章平均质量分 92
jazwoo
这个作者很懒,什么都没留下…
展开
-
subprocess.Popen() close_fds问题 OSError: [Errno 12] Cannot allocate memory
使用subprocess.Popen() 来调用命令时竟然发现response确实是返回到客户端了,但是服务器端和客户端的http连接竟然还连接着,一直不断。python的文档,发现:http://docs.python.org/library/subprocess.html cmd = 'ps aux | grep "memcached .* %s"' % port原创 2016-04-08 10:16:58 · 7870 阅读 · 4 评论 -
CGI,FastCGI,SCGI,WSGI 差别
CGI = Common Gateway Interface顾名思义,它是一种接口规范。该规范详细定义了Web服务器中运行的服务器代理程序,怎样获取及返回网页生成过程中,服务器环境上下文和HTTP协议中的参数名称,如大家所熟知的:REQUEST_METHOD,QUERY_STRING,CONTENT_TYPE等等。绝大部分的Web服务器程序,是以脚本的形式代理接受并处理HTTP请求,返回H转载 2014-02-11 12:59:16 · 3485 阅读 · 0 评论 -
进程,线程,协程
首先这些东西都是为了”并发“, 也就是”同一时间“执行多个任务. 不过这三者在实现这一目标上有不同的方法. 首先三者都构成任务(Task), 都有下面一些特征.独立的控制流有内部状态可以被调度可以同其他任务通讯 进程之间不共享任何状态, 进程的调度由操作系统完成, 进程间通讯也要通过操作系统. (共享内存, 管道等等).进程的问题: 进程间切换开转载 2014-02-21 19:45:27 · 803 阅读 · 0 评论 -
python基于http协议编程:httplib,urllib和urllib2
1、urllib2可以接受一个Request类的实例来设置URL请求的headers,urllib仅可以接受URL。这意味着,你不可以伪装你的User Agent字符串等。2、urllib提供urlencode方法用来GET查询字符串的产生,而urllib2没有。这是为何urllib常和urllib2一起使用的原因。urllib get数据的方法#!/usr/bin/pyth转载 2014-01-20 17:45:55 · 1095 阅读 · 0 评论 -
Python通过win32 处理Word
首先介绍下office win32 com接口,这个是MS为自动化提供的操作接口,比如我们打开一个WORD文档,就可以在里面编辑VB脚本,实现我们自己的效果。对于这种一本万利的买卖,Python怎么能放过,它内置了对于win32 com接口的支持,我们可以方便的控制。要想熟练使用office win32 com接口,没有什么比MS提供的API文档更加权威了,此处附上WORD和PPT的文档,转载 2014-01-16 14:07:45 · 5030 阅读 · 1 评论 -
用Python读写Excel文件总结
虽然天天跟数据打交道,也频繁地使用Excel进行一些简单的数据处理和展示,但长期以来总是小心地避免用Python直接读写Excel文件。通常我都是把数据保存为以TAB分割的文本文件(TSV),再在Excel中进行导入或者直接复制粘贴。前段时间做一个项目,却不得不使用Python直接生成Excel文件,后来随着需求的变化,还要对已有的Excel文件进行读取。在这个过程中,研究并尝试了一些工具转载 2014-01-16 13:39:27 · 6943 阅读 · 1 评论 -
celery配合rabbitmq任务队列实现任务的异步调度执行
前言:这东西在任务调度方面,很有一套的,学习他有段时间了,自己也试图在项目中用,但苦于没有这个机会。这两天要给部门写个rest的短信接口,但是总感觉那东西时不时的会堵塞,致使其他的逻辑跑不通,所以把要发信息的这个任务放到后台异步的执行,等我想起来,再看看结果。对于上面的场景,我曾经用tornado和gevent的方案解决,但是在我的理解范围下,感觉还是不算成熟。 tor转载 2013-12-28 02:15:30 · 6580 阅读 · 0 评论 -
消息队列、AMQP和RabbitMQ
一、应用场景及优点在项目设计、开发过程中,当我们遇到以下几种情况都可以使用消息队列:对于一些无需即时返回且耗时的操作;并发要求很高,数据处理很耗时,但是又无需及时返回信息的操作;数据转移类的操作,比如客户端和内网都要进行数据传输和交换, 现有架构中, 客户端不能直接访问内网, 那么客户端只能: 先把数据保存到外网服务器, 然后内网服务器再拉回来处理. 这种方式可以保证数据都能被处理转载 2013-12-26 20:49:48 · 1730 阅读 · 1 评论 -
python使用rabbitmq实例三,交换机(3)
上面一篇是说到了工作队列,每次消息都只会发送给其中一个接收端,如果需要将消息广播出去,让每个接收端都能收到,那么就要使用交换机。交换机的工作原理:消息发送端先将消息发送给交换机,交换机再将消息发送到绑定的消息队列,而后每个接收端都能从各自的消息队列里接收到信息。rabbitmq交换机工作原理下面用send.py和receive.py来模拟实现交换机的功能。sen转载 2013-12-28 00:37:52 · 1034 阅读 · 0 评论 -
python使用rabbitmq实例五,路由键模糊匹配(5)
上一篇说了路由键的功能,通过设置路由键,可以将消息发送到相应的队列,这里的路由键是要完全匹配,比如info消息的只能发到路由键为info的消息队列。路由键模糊匹配,就是可以使用正则表达式,和常用的正则表示式不同,这里的话“#”表示所有、全部的意思;“*”只匹配到一个词。看完示例就能明白了。这边继上一篇,还是用send.py和receive.py来实现路由键模糊匹配的功能。send.转载 2013-12-28 01:02:12 · 884 阅读 · 0 评论 -
python使用rabbitmq实例四,路由键(4)
第三篇说明了关于交换机的使用,已经能实现给所有接收端发送消息,但是如果需要自由定制,有的消息发给其中一些接收端,有些消息发送给另外一些接收端,要怎么办呢?这种情况下就要用到路由键了。路由键的工作原理:每个接收端的消息队列在绑定交换机的时候,可以设定相应的路由键。发送端通过交换机发送信息时,可以指明路由键 ,交换机会根据路由键把消息发送到相应的消息队列,这样接收端就能接收到消息了。转载 2013-12-28 00:43:01 · 907 阅读 · 0 评论 -
python使用rabbitmq实例六,远程结果返回(6)
前面的例子都有个共同点,就是发送端发送消息出去后没有结果返回。如果只是单纯发送消息,当然没有问题了,但是在实际中,常常会需要接收端将收到的消息进行处理之后,返回给发送端。处理方法描述:发送端在发送信息前,产生一个接收消息的临时队列,该队列用来接收返回的结果。其实在这里接收端、发送端的概念已经比较模糊了,因为发送端也同样要接收消息,接收端同样也要发送消息,所以这里笔者使用另外的示例来演示这一转载 2013-12-28 01:03:12 · 1127 阅读 · 0 评论 -
Django静态文件处理总结
静态文件指像css,js,images之类的文件,在Django里面静态文件的处理与一般的视图是不一样,新手往往容易犯迷糊,本文做一下总结:一、概述: 静态文件交由Web服务器处理,Django本身不处理静态文件。简单的处理逻辑如下(以nginx为例): URI请求-----> 按照Web服务器里面的配置规则先处理,以ngin转载 2014-01-12 12:48:39 · 786 阅读 · 0 评论 -
python使用rabbitmq实例七,相互关联编号correlation id(7)
上一遍演示了远程结果返回的示例,但是有一个没有提到,就是correlation id,这个是个什么东东呢?假设有多个计算节点,控制中心开启多个线程,往这些计算节点发送数字,要求计算结果并返回,但是控制中心只开启了一个队列,所有线程都是从这个队列里获取消息,每个线程如何确定收到的消息就是该线程对应的呢?这个就是correlation id的用处了。correlation翻译成中文就是相互关联转载 2013-12-28 01:07:01 · 1271 阅读 · 0 评论 -
eclipse安装一个新的Python开发包后,import后不能使用包内的方法
安装一个pip包后需要在Preferences-pyDev-Interpreter里重新配置Python的编译器,因为当前没有包含新加进来的包可以删除掉,重新加上。否则会导致import模块后,模块内的方法仍然不能调用。(ubuntu的默认python地址是/usr/bin/python,只要你不是后来又安装了新的python,直接用这个地址就可以了~)原创 2013-12-26 13:34:06 · 4114 阅读 · 0 评论 -
python使用rabbitmq实例二,工作队列 (2)
上一篇介绍了rabbitmq的安装和经典的hello world!实例。这里将对工作队列(Work Queues)做一个了解。因为是接上一篇说明的,所以如果没看过上一篇,看这篇可能会比较难理解。上一篇的地址是:ubuntu安装rabbitmq和python的使用实现消息也可以理解为任务,消息发送者可以理解为任务分配者,消息接收者可以理解为工作者,当工作者接收到一个任务,还没完成的时候,任务转载 2013-12-26 23:27:42 · 1015 阅读 · 0 评论 -
python fabric实现远程操作和部署
环境配置在本机和目标机器安装对应包(注意,都要有)sudo easy_install fabric目前是1.8版本(或者用pip install,一样的)安装完后,可以查看是否安装成功[ken@~$] which fab/usr/local/bin/fab装完之后,可以浏览下官方文档执行本机操作简单的本地操作:from fabr原创 2014-02-13 10:28:45 · 3681 阅读 · 2 评论 -
python ‘yield’和‘Generators(生成器)’
协程与子例程我们调用一个普通的Python函数时,一般是从函数的第一行代码开始执行,结束于return语句、异常或者函数结束(可以看作隐式的返回None)。一旦函数将控制权交还给调用者,就意味着全部结束。函数中做的所有工作以及保存在局部变量中的数据都将丢失。再次调用这个函数时,一切都将从头创建。 对于在计算机编程中所讨论的函数,这是很标准的流程。这样的函数只能返回一个值,不过,有时转载 2014-02-12 18:29:03 · 817 阅读 · 0 评论 -
django UnicodeEncodeError
出现 UnicodeEncodeError: 'ascii' codec can't encode characters in position 53-60: ordinal not in range(128)一般解决是import sysreload(sys) sys.setdefaultencoding('utf-8') 但是用nginx +原创 2016-04-01 16:53:07 · 1881 阅读 · 0 评论 -
django migrations
在1.6之前, Django只支持添加新的model到数据库, 而无法编辑或修改已经存在的model. 在当时, 这些Django缺失的功能可以通过South实现.1. 新的命令Django 1.7 为我们带来了三个新命令:migrate: 用于执行迁移动作makemigrations: 基于当前的model创建新的迁移策略文件sqlmigrate: 显示迁移的SQL语句原创 2015-11-13 17:36:49 · 1280 阅读 · 0 评论 -
Linux下安装Apache并以mod_wsgi方式部署django站点
首先下载Apache源码压缩包,地址为http://mirror.bit.edu.cn/apache/httpd/继续下载apr和apr-util压缩包,地址为http://mirror.bit.edu.cn/apache/apr/下载pcre压缩包,地址为http://ftp.exim.llorien.org/pcre/l 安装arptar -zxf转载 2015-11-10 15:47:23 · 1112 阅读 · 1 评论 -
django-crontab定时任务
django-crontab实现定时任务1 django-crontab安装django-crontab安装:pip install django-crontabdjango-crontab加入:只需要将django-crontab加入到settings.py的INSTALLED_APPS即可。如下代码:INSTALLED_APPS = ('django_原创 2015-11-05 19:07:26 · 5780 阅读 · 0 评论 -
Django的单元测试
Django的单元测试使用python的unittest模块,这个模块使用基于类的方法来定义测试。类名为django.test.TestCase,继承于python的unittest.TestCase。1234567891011121314from d原创 2015-11-05 19:09:26 · 1849 阅读 · 0 评论 -
pip 安装python环境及打包
0.安装虚拟环境pip install virtualenv virtualenv env1 source env1/bin/activate 1. 将包依赖信息保存在requirements.txt文件pip freeze > requirements.txt 2.根据依赖文件安装依赖pip install -r requirements.txt转载 2014-07-11 12:02:51 · 1799 阅读 · 0 评论 -
python中setup 打包安装包
python的第三方模块越来越丰富,涉及的领域也非常广,如科学计算、图片处理、web应用、GUI开发等。当然也可以将自己写的模块进行打包或发布。一简单的方法是将你的类包直接copy到python的lib目录,但此方式不便于管理与维护,存在多个python版本时会非常混乱。现介绍如何编写setup.py来对一个简单的python模块进行打包。一、编写模块进入项目目录#cd /home转载 2014-07-08 16:07:58 · 3549 阅读 · 0 评论 -
Python 虚拟环境:Virtualenv
virtualenvvirtualenv用于创建独立的Python环境,多个Python相互独立,互不影响,它能够:1. 在没有权限的情况下安装新套件2. 不同应用可以使用不同的套件版本3. 套件升级不影响其他应用安装sudo apt-get install python-virtualenv使用方法virtualenv [虚拟环境名称] 如转载 2014-07-08 14:56:47 · 682 阅读 · 0 评论 -
Nginx+uWSGI+Django方法部署Django程序
在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求。nginx把所有静态请求自己来处理(这是NGINX的强项)。然后,NGINX将所有非静态请求通过uwsgi传递给Django,由Django来进行处理,从而完成一次WEB请求。可见,uwsgi的作用就类似一个桥接器。起到桥梁的作用。NOTE:不使用nginx,只使用uwsgi+dj转载 2014-02-19 13:27:02 · 1177 阅读 · 0 评论 -
setup.py vs requirements.txt
对于 setup.py 和 requirements.txt 的角色有很多误解,很多人认为它们是两个重复的事情,甚至创造了 工具 来处理 这种“重复”。12.1. Python库这里所说的Python库是指那些被开发并且为了其他人来使用而发布的东西,你可以在 PyPI 找到很多Python库。为了更好的推广和传播 自己,Python库会包含很多的信息,比如它的名字,版本号,转载 2014-07-08 16:08:30 · 1572 阅读 · 0 评论 -
Supervisor 管理进程
Supervisord是用Python实现的一款非常实用的进程管理工具,monit和supervisord的一个比较大的差异是supervisord管理的进程必须由supervisord来启动,monit可以管理已经在运行的程序;supervisord还要求管理的程序是非daemon程序,supervisord会帮你把它转成daemon程序,因此如果用supervisord来管理nginx的话,必转载 2014-03-10 14:53:52 · 837 阅读 · 0 评论 -
django中south做数据迁移
syncdb是db synchronization的缩写,意思是数据库同步。 syncdb 命令是同步你的模型到数据库的一个简单方法。 它会根据 INSTALLED_APPS 里设置的app来检查数据库, 如果表不存在,它就会创建它。 需要注意的是, syncdb 并不能将模型的修改或删除同步到数据库;如果你修改或删除了一个模型,并想把它提交到数据库,syncdb并不会做出任何处理原创 2014-03-07 16:22:23 · 854 阅读 · 0 评论 -
django的权限管理系统permission
1.为model添加权限[html] view plaincopyclass Task(models.Model): ....... class Meta: permissions = ( ('oprater_task','can change the tasks'),转载 2014-03-11 16:52:41 · 1768 阅读 · 0 评论 -
python 子进程subprocess
subprocess以及常用的封装函数当我们运行python的时候,我们都是在创建并运行一个进程。正如我们在Linux进程基础中介绍的那样,一个进程可以fork一个子进程,并让这个子进程exec另外一个程序。在Python中,我们通过标准库中的subprocess包来fork一个子进程,并运行一个外部的程序(fork,exec见Linux进程基础)。 subprocess包转载 2014-02-27 12:03:51 · 851 阅读 · 0 评论 -
Python2.7 psutil模块
http://code.google.com/p/psutil/wiki/Documentation#Classes使用python包psutil来对进程管理包含类: class AccessDenied(Error) class Error(exceptions.Exception) class NoSuchProcess(Error)原创 2014-02-27 11:14:38 · 1862 阅读 · 0 评论 -
ubuntu安装rabbitmq和python的使用实现 (1)
在安装openstack的时候,需要安装rabbitmq,百度了下rabbitmq,发现是用erlang写的,基于对erlang的好感,于是就想了解下rabbitmq。rabbitmq中文翻译的话,主要还是mq字母上:Message Queue,即消息队列的意思。前面还有个rabbit单词,就是兔子的意思,和python语言叫python一样,老外还是蛮幽默的。rabbitmq服务类似于m转载 2013-12-26 23:22:16 · 954 阅读 · 0 评论 -
python 装饰器 面向切面
1. 装饰器入门1.1. 需求是怎么来的?装饰器的定义很是抽象,我们来看一个小例子。1def foo():2 print 'in foo()'3 4foo()转载 2013-12-25 21:12:55 · 579 阅读 · 0 评论 -
python 函数小结
函数简介及定义简介函数是可重用的程序段它们允许你给一块语句一个名称,然后你可以在你的程序的任何地方使用这个名称任意多次地运行这个语句块。函数作用:最大程度重用和最小化代码冗余,流程分解定义使用def可以声明一个函数,完整的函数由函数名,参数以及函数实现语句组成。一般形式:def (参数列表): return原创 2013-12-10 11:14:42 · 574 阅读 · 0 评论 -
NumPy 数组1
NumPy数组NumPy数组是一个多维数组对象,称为ndarray。其由两部分组成:实际的数据描述这些数据的元数据大部分操作仅针对于元数据,而不改变底层实际的数据。关于NumPy数组有几点必需了解的:NumPy数组的下标从0开始。同一个NumPy数组中所有元素的类型必须是相同的。NumPy数组属性在详细介绍NumPy数组之前。先详细介转载 2013-12-11 00:38:59 · 882 阅读 · 0 评论 -
Python中dict 字典
#字典的添加、删除、修改操作dict = {"a" : "apple", "b" : "banana", "g" : "grape", "o" : "orange"}dict["w"] = "watermelon"del(dict["a"])dict["g"] = "grapefruit"print dict.pop("b")print dictdict.clear()原创 2013-12-09 21:48:56 · 690 阅读 · 0 评论 -
python 字符串
字符串连接方法1: 用字符串的join方法a = ['a','b','c','d']content = ''content = ''.join(a)print content方法2: 用字符串的替换占位符替换a = ['a','b','c','d']content = ''content = '%s%s%s%s' %原创 2013-12-09 21:40:44 · 631 阅读 · 0 评论 -
Python 列表(list)、字典(dict)、字符串(string)常用基本操作小结
[python] view plaincopy创建列表 sample_list = ['a',1,('a','b')] Python 列表操作 sample_list = ['a','b',0,1,3] 得到列表中的某一个值 value_start = sample_list[0] end_value = samp转载 2013-12-09 21:49:57 · 636 阅读 · 0 评论