Clever Deng时光

在交流中成长,记录、分享ing...

推荐 Python 日志模块 mongodb-log

最近的项目中,需要一个轻巧点的日志系统,主要记载服务器运行时的各种信息(警告、错误等等),由于 Python 自带的日志模块 logging 只使用文件形式存储的,也许对日后的检索不是太方便,因此也有想过扩展一下 logging 模块的想法。偶然在 Github 上瞎逛发现有使用 MongoDB 存储的日志模块 mongodb-log ,浅浅使用心得:
1、非常轻巧
2、提供 Web 界面方便远程浏览(使用Web.py框架)。

使用范例

import logging
from pymongo.connection import Connection
from mongolog.handlers import MongoHandler

log = logging.getLogger('example')
log.setLevel(logging.DEBUG)
log.addHandler(MongoHandler.to('mongolog', 'log'))
log.debug("1 - debug message")
log.info("2 - info message")
log.warn("3 - warn message")
log.error("4 - error message")
log.critical("5 - critical message")
如果你在使用 Python ,巧合的是需要日志系统,更巧合的也对 MongoDB 感兴趣,更更巧合的是需要个简单的 Web 界面,那么这个模块完美解决以上问题咯。

围观一下...

Python垃圾回收(gc)拖累了程序执行性能?

源起

前段时间,在做文本处理的实验时,需要预加载大量的原始数据(100W),在Python中使用的字典(dict)类型负责保存这些数据,很快就开发完成了一个Demo版,然而程序执行的效率不是那么令人满意,通过使用Python中的profile发现,影响程序执行性能的关键语句就那么几条(用dict保存加载后原始数据,这是个循环遍历。)

解决问题

既然找到了问题源,于是就勒起衣袖开始动手尝试使用各种解决方案替代效率不佳的,经过多次的反复尝试,调优的效果不太明显,最后一个idea:考虑Python垃圾回收机制的影响了,最后也证明了这个想法的靠谱程度,本文后续部分将分享调优的过程与测试结果。

浅谈Python垃圾回收机制

在使用C语言开发时代,我们的开发效率(生产力的问题)受牵制于内存释放、泄露等问题,于是普遍的口号---“指针好难学”。时过境迁,当今的流行的语言都配套了内存自动回收机制,从而使我们有更多的精力去纠结于业务上处理。

调优之前

围观一下...

Python常见的i/o操作常用手法

在项目开发过程中,时常需要对目录、文件进行相关的操作,比如读取文件的内容,遍历目录等等。在Python中也提供了强大的类库支持这些I/O操作。本文将记录Python中对文件、目录的一些常见操作手法。

涉及文件、目录操作的模块

os、os.path、shutil

文件、目录的创建、删除

创建目录可以简单的使用下面的语句即可完成(支持2层目录的创建):
os.mkdir("test")
os.mkdir("test/test")
相对于目录的创建而言,目录的删除就会有点小陷阱了,对于一个空目录的删除,可以简单的使用下面的语句完成:
os.rmdir("test")
但是,如果该目录不为空将会抛出“Directory not empty: 'test'”异常了。如果在其他语言中可能需要一层一层递归进行删除,但是在Python中,有个神器提供目录树的删除的功能,可以使用下面的神器解决:

围观一下...

Python实现多线程安全单例模式

在开发过程中,时常需要某些对象在软件整个运行生命周期只需存在一个副本,比如服务器加载的参数配置等等,有种现成的设计模式专干这种活---单例模式,能很好的适用这种需求场景。而由于Python动态语言的灵活性,相对于其它编程语言的实现尤为优雅、简洁、方便,实现代码如下:
class Application(object):
     def __init__(self):
         self.args = "Hello world"

     @classmethod
     def instance(cls):
         if not hasattr(cls, "_instance"):
             cls._instance = cls()
         return cls._instance
以下是多线程测试代码:

围观一下...

django for apache、nginx简单部署

在生产环境中,一般考虑了大量用户的高并发行和稳定性,一般会使用Apache、Nginx等专业的Web服务器,从而放弃使用便于开发过程中测试代码使用的Django自带轻量级服务器。本文记录Django在Apache、Nginx的简单部署方案,以便记忆力衰退时翻阅。

Apache使用mod_python部署

安装mod_python:
sudo apt-get install libapache2-mod-python
编辑/etc/apache2/httpd.conf,添加以下配置信息:
LoadModule python_module modules/mod_python.so
<Location "/mysite/">
    SetHandler python-program
    PythonHandler django.core.handlers.modpython
    SetEnv DJANGO_SETTINGS_MODULE mysite.settings
    PythonOption django.root /mysite
    PythonDebug On
    PythonPath "['var/www'] + sys.path"
</Location>
重启Apache,如果RP还行,即可访问Django创建的项目。注:PythonPath选项设置的目录为您项目所在目录的上级目录路径(有点儿绕)详细请参考:http://docs.djangoproject.com/en/1.3/howto/deployment/modpython/

Nginx使用Fastcgi部署

围观一下...

Back to Top

Copyright © 2008 - 2011 CleverDeng时光