随笔分类 -  Python

摘要:最近需要写一个数据迁移脚本,将单一Oracle中的数据迁移到MySQL Sharding集群,在linux下安装cx_Oracle感觉还是有一点麻烦的,整理一下,做个总结。对于Oracle客户端,不只需要安装相应的python模块(这里我用了Oracle官方的python模块——cx_Oracle),还需要安装Oracle Client,一般选择Instant Client就足够了,还需要配置tnsnames.ora(当然也可以简单的通过host:port/schema访问)。安装:1. 首先确定版本。因为我们的Oracle数据是在是有点老,所以我选择了一个比较老的版本——Oracle Ins 阅读全文
posted @ 2012-07-24 19:22 残夜 阅读(23083) 评论(0) 推荐(1)
摘要:目前,Apache和mod_python是在生产服务器上部署Django的最健壮搭配。mod_python 是一个在Apache中嵌入Python的Apache插件,它在服务器启动时将Python代码加载到内存中。Django 需要Apaceh 2.x 和mod_python 3.x支持。Apache的配置参见:http://www.djangoproject.com/r/apache/docs/使用mod_python部署1.为了配置基于 mod_python 的 Django,首先要安装有可用的 mod_python 模块的 Apache。2.然后应该有一个 LoadModule 指令在 阅读全文
posted @ 2012-04-06 17:06 残夜 阅读(11333) 评论(0) 推荐(2)
摘要:Django 的runserver只为开发环境提供了单进程的django服务器,这不能用于生产环境上。将我们的Django程序部署到产品服务器运行之前,我们可能还要关注下面提到的一些地方。1.关闭Debug模式使用django-admin.py startproject 生成的项目,默认settings.py中的DEBUG是开户的,这在正式环境可能会带来以下问题:所有的数据库查询将被保存在内存中, 以 django.db.connection.queries 的形式. 你可以想象,这个吃内存!任何404错误都将呈现django的特殊的404页面,而不是普通的404页面。 这个页面包含潜在的敏感 阅读全文
posted @ 2012-04-06 15:12 残夜 阅读(4076) 评论(1) 推荐(1)
摘要:准备在服务器上安装 mod_python + django,系统环境如下:Ubuntu 10.04python2.6.5django 1.4.0mod_python 3.3.1apache 2.2.14问题一:connobject.c: In function ‘_conn_read’:connobject.c:142: error: request for member ‘next’ in something not a structure or unionapxs:Error: Command failed with rc=65536.make[1]: *** [mod_python.so 阅读全文
posted @ 2012-04-06 13:02 残夜 阅读(1732) 评论(0) 推荐(0)
摘要:最近在看Django的国际化,看了很多贴子,终于有了比较系统的认识,在这里做一下简单总结。先来看两个概念:国际化:是指为了该软件在任何地区的潜在使用而进行程序设计的过程。 它包括了为将来翻译而标记的文本(比如用户界面要素和错误信息等)、日期和时间的抽象显示以便保证不同地区的标准得到遵循、为不同时区提供支持,并且一般确保代码中不会存在关于使用者所在地区的假设。 您会经常看到国际化被缩写为“I18N”(18表示Internationlization这个单词首字母I和结尾字母N之间的字母有18个)。本地化: 是指使一个国际化的程序为了在某个特定地区使用而进行实际翻译的过程。 有时,本地化缩写为L10 阅读全文
posted @ 2012-04-05 20:51 残夜 阅读(8772) 评论(1) 推荐(1)
摘要:MTV里的M代表模型。 Django模型是用Python代码形式表述的数据在数据库中的定义。对数据层来说它等同于 CREATE TABLE 语句,只不过执行的是Python代码而不是 SQL,而且还包含了比数据库字段定义更多的含义。Django用模型在后台执行SQL代码并把结果用Python的数据结构来描述。 Django也使用模型来呈现SQL无法处理的高级概念。1 from django.db import models2 3 class Publisher(models.Model):4 name = models.CharField(max_length=30)5 add... 阅读全文
posted @ 2012-04-03 22:57 残夜 阅读(1547) 评论(0) 推荐(3)
摘要:元字符1.匹配元字符:. 它匹配除了换行字符外的任何字符,在 alternate 模式(re.DOTALL)下它甚至可以匹配换行^ 匹配行首。除非设置 MULTILINE 标志,它只是匹配字符串的开始。$ 匹配行尾,行尾被定义为要么是字符串尾,要么是一个换行字符后面的任何位置。[] 它们常用来指定一个字符类别,所谓字符类别就是你想匹配的一个字符集\ 反斜杠后面可以加不同的字符以表示不同特殊意义。它也可以用于取消所有的元字符,这样你就可以在模式中匹配它们了| 可选项,或者 "or" 操作符。() 一般情况下表示一个记忆组 (remembered group)。你可以利用 re 阅读全文
posted @ 2012-04-03 19:48 残夜 阅读(2027) 评论(0) 推荐(3)
摘要:Pyinotify是一个Python模块,用来监测文件系统的变化。 Pyinotify依赖于Linux内核的功能—inotify(内核2.6.13合并)。 inotify的是一个事件驱动的通知器,其通知接口通过三个系统调用从内核空间到用户空间。pyinotify结合这些系统调用,并提供一个顶级的抽象和一个通用的方式来处理这些功能。pyinotify 说百了就是通过 调用系统的inotify来实现通知的inotify 既可以监视文件,也可以监视目录Inotify 使用系统调用而非 SIGIO 来通知文件系统事件。Inotify 可以监视的文件系统事件包括:Event NameIs an Even 阅读全文
posted @ 2011-11-01 05:16 残夜 阅读(2960) 评论(1) 推荐(1)
摘要:Scribe是跨语言的日志聚合框架,如何在Python中使用它呢?其在Python中的简单使用方法如下:#!/usr/bin/env python# encoding: utf8"""scribe_cat: A simple script for sending messages to scribe."""__author__ = 'zhoubo'import sysfrom scribe import scribefrom thrift.transport import TTransport, TSocketfrom 阅读全文
posted @ 2011-11-01 02:07 残夜 阅读(1879) 评论(0) 推荐(0)
摘要:不久前,在互联网上出现了一篇有趣的文章,讲的是对于同一个问题,不同层次的Python程序员编出的Python代码显示出了不同的风格,代码都很简单,有趣。 编程新手def factorial(x): if x == 0: return 1 else: return x * factorial(x - 1) print factorial(6)一年编程经验(学Pascal的)def factorial(x): result = 1 i = 2 while i ... 阅读全文
posted @ 2011-10-17 11:36 残夜 阅读(504) 评论(0) 推荐(0)
摘要:大家都知道Python的线程实际上是使用单核在运行,所以大多数想使用多核来运算,Python自己也提供了很多分布式框架,比如pp,pprocess等等,其中有网络分布式,也有单机分布式,详情可参见:http://wiki.python.org/moin/ParallelProcessing其中本人也研究过几个分布式框架,感觉还是非常强大的,但多多少少存在不足(主要取决于需求)和一定复杂度(框架学习),工作中涉及到一个很简单的使用多核计算模型,自己写了一个使用多核的外壳和大家分享一下:#!/usr/bin/env python# encoding: utf-8""" 阅读全文
posted @ 2011-10-17 11:19 残夜 阅读(1254) 评论(0) 推荐(0)
摘要:在项目中遇到一个很糟糕的问题,运行一个Python服务脚本,把服务器跑死了,以前以为开的进程过多,进程中因批量处理,导致内存和交换分区耗光引起的。后来才发现,确实是内存和交换分区无空间导致的死机,但却不是因为多进程分析引起的。从网上看了很多资料,相关信息并不多,最后确定是由于Python对大对象内存的释放引起的。在一个对象的引用计数减为0时,与该对象对应的析构函数就会被调用,但是要特别注意的是,调用析构函数并不意味着最终一定会调用free释放内存空间,如果真是这样的话,那频繁地申请、释放内存空间会使 Python的执行效率大打折扣。Python内存管理规则:del的时候,把list的元素释放掉 阅读全文
posted @ 2011-10-10 18:23 残夜 阅读(9551) 评论(0) 推荐(0)
摘要:同步进程import subprocesscmd = ('tail', '/tmp/test.log')sp = subprocess.Popen(cmd, stdout=subprocess.PIPE,stderr=subprocess.PIPE)if sp.wait() == 0: print 'exec command succussful.'else: print sp.stderr.read()异步进程import subprocesscmd = ('tail', '-f', '/tmp/test 阅读全文
posted @ 2011-10-10 15:38 残夜 阅读(2434) 评论(0) 推荐(0)
摘要:Python提供多个创建子进程的模块,我比较习惯使用subprocess模块,因为在Python手册中有这样一段话: This module intends to replace several other, older modules and functions, such as: os.system、os.spawn*、os.popen*、popen2.*、commands.* subprocess被用来替换一些老的模块和函数,如:os.system、os.spawn*、os.popen*、popen2.*、commands.*。可见,subprocess是被推荐使用的模块。模块选择比.. 阅读全文
posted @ 2011-10-10 13:50 残夜 阅读(9253) 评论(0) 推荐(0)
摘要:1.有两种方式来实现并发性,一种方式是让每个“任务”或“进程”在单独的内在空间中工作,每个都有自已的工作内存区域。不过,虽然进程可在单独的内存空间中执行,但除非这些进程在单独的处理器上执行,否则,实际并不是“同时”运行的。是由操作系统把处理器的时间片分配给一个进程,用完时间片后就需退出处理器等待另一个时间片的到来。另一种方式是在在程序中指定多个“执行线程”,让它们在相同的内存空间中工作。这称为“多线程处理”。线程比进程更有效,因为操作系统不必为每个线程创建单独的内存空间。2. 新建进程用os.fork函数。但它只在POSIX系统上可用,在windows版的python中,os模块没有定义os. 阅读全文
posted @ 2011-09-28 13:20 残夜 阅读(3608) 评论(0) 推荐(0)
摘要:Django Web编程思路 global setting生成项目project初始化配置settings.py生成应用模块app安装app至projectapp setting编写models.py定义urls.py将app urls加入project urls配置编写views.py编写相应的templaterun server启动项目,浏览器访问 Check Environment Python2.6Django http:// www.djangoproject.com/downloadConfig PYTHONPATH /etc/environment Start Projec... 阅读全文
posted @ 2011-09-19 21:33 残夜 阅读(1030) 评论(0) 推荐(1)
摘要:Jug 是一个基于任务的并行处理框架,采用 Python 编写,可用来在不同的机器上运行同一个任务,使用 NFS 做文件系统的通讯;也可在使用同一台服务器的多CPU运行同一任务。Jug工作原理://Todo//Jug使用小结:1.使用Jug execute jugfile.py启动并行一个进程,实际上执行如下:$python /usr/loca/python/bin/jug execute jugfile.py2.使用jug status jugfile.py查看并行进程的状态,如下图:运行结束时的并行状态如下:Task之间可以存在依赖关系,只能是任务之间的依赖,任务的输出结果,无法作为任务的 阅读全文
posted @ 2011-09-19 20:54 残夜 阅读(833) 评论(0) 推荐(0)
摘要:我们经常会采用生产者/消费者关系的两个线程来处理一个共享缓冲区的数据。例如一个生产者线程接受用户数据放入一个共享缓冲区里,等待一个消费者线程对数据取出处理。但是如果缓冲区的太小而生产者和消费者两个异步线程的速度不同时,容易出现一个线程等待另一个情况。为了尽可能的缩短共享资源并以相同速度工作的各线程的等待时间,我们可以使用一个“队列”来提供额外的缓冲区。 创建一个“队列”对象import Queuemyqueue = Queue.Queue(maxsize = 10)Queue.Queue类即是一个队列的同步实现。队列长度可为无限或者有限。可通过Queue的构造函数的可选参数maxsize来设. 阅读全文
posted @ 2011-09-16 11:59 残夜 阅读(1205) 评论(0) 推荐(0)
摘要:多个执行线程经常要共享数据,如果仅仅读取共享数据还好,但是如果多个线程要修改共享数据的话就可能出现无法预料的结果。 同步“锁”机制锁对象用threading.RLock类创建mylock = threading.RLock()如何使用锁来同步线程呢?线程可以使用锁的acquire() (获得)方法,这样锁就进入“locked”状态。每次只有一个线程可以获得锁。如果当另一个线程试图获得这个锁的时候,就会被系统变为“blocked”状态,直到那个拥有锁的线程调用锁的release() (释放)方法,这样锁就会进入“unlocked”状态。“blocked”状态的线程就会收到一个通知,并有权利获得. 阅读全文
posted @ 2011-09-16 11:54 残夜 阅读(1244) 评论(0) 推荐(0)
摘要:线程与进程的不同之处在于,它们共享状态、内存和资源。对于线程来说,这个简单的区别既是它的优势,又是它的缺点。一方面,线程是轻量级的,并且相互之间易于通信,但另一方面,它们也带来了包括死锁、争用条件和高复杂性在内的各种问题。幸运的是,由于 GIL 和队列模块,与采用其他的语言相比,采用 Python 语言在线程实现的复杂性上要低得多。全局解释器锁 (Global Interpretor Lock) 说明 Python 解释器并不是线程安全的。当前线程必须持有全局锁,以便对 Python 对象进行安全地访问。因为只有一个线程可以获得 Python 对象/C API,所以解释器每经过 100 个字节 阅读全文
posted @ 2011-09-14 16:28 残夜 阅读(616) 评论(0) 推荐(0)