[原创]Python代码模块热更新机制实现(reload)
[原创]Python代码模块热更新机制实现(reload)
by AKara 2009-05-17 @ http://blog.csdn.net/akara @ akaras@163.com
---------------------------------------------------------------------
对一个游戏来说,无论是client或server都非常需要一套代码热更新的机制。
它能大大提高开发效率,又能超乎玩家期望地在运营期在线修正bug和增添功能。
可谓必备机制。
---------------------------------------------------------------------
在实现一个Python版本的热更新系统时,我走了不少弯路,钻了很多牛角尖,
完成了一个我看来有很多细节不够完善不够强大的版本,并在想做到'更完美'。
直到和同事DX,KHF讨论后,才发现最重要的是明确热更新机制的目标是什么。
往往我们善于将小事一件件做好,但却忘记问问自己为什么前行。
我要作的热更新机制的目标是:
(1)更新代码定义
(2)不更新数据对象
(3)不要依赖热更新机制解决所有问题。过于复杂的改动,重启进程
具体到Python这个语言而言,目标便是:
(1)更新类/函数及衍生对象:class/function/method/classmethod/staticmethod
(2)不更新除了(1)中的其他类型对象
(3)不要依赖热更新机制解决所有问题。过于复杂的改动,重启进程
第(3)点将我解救出来了:不要把所有责任压在热更新机制上。
本文所指模块只限于.py/.pyc/.pyo...(即非dll/so/bulitin)为载体的模块。
---------------------------------------------------------------------
Python的__builtins__中有一个众所周知的reload,但它在大项目中的可用性
几乎为零也是众所周知的。它辜负了Python Documentation中对它的评价:
"This is useful if you have edited the module source file using an
external editor and want to try out the new version without leaving
the Python interpreter"
---------------------------------------------------------------------
这里简单翻译一下Python内建的reload的说明:
当reload(M)被执行后:
* M模块将被重新解释字节码。并再执行模块级定义的执行语句(译注:由此应
认识到在模块级就编写函数调用和类对象生成是多么
相关文档:
前一篇文章写的在APACHE安装MOD_PYTHON的经过,其实挺简单,就是版本不兼容的问题.这次我大概说下部署DJANGO的过程.
先修改APACHE配置文件,使其加载mod_python模块
LoadModule python_module libexec/mod_python.so
运行命令查看
bin/httpd -M可以看到
python_module (shared)
Syntax OK
说明apache已经成功加 ......
基本上都是使用python来解析xml文件的。
比如我要将内容为
<?xml version="1.0" encoding="utf-8"?>
<root>
<book isbn="34909023">
<author>
&n ......
%a 星期几的简写
%A 星期几的全称
%b 月分的简写
%B 月份的全称
%c 标准的日期的时间串
%C
年份的后两位数字
%d 十进制表示的每月的第几天
%D 月/天/年
%e 在两字符域中,十进制表示的每月的第几天
%F
年-月-日
%g 年份的后两位数字,使用基于周的年
%G 年分,使用基于周的年
%h 简写的月份名 ......
使用xlrd
来
读取,xlrd的下载及安装可以参看:
Python
"xlrd" package for extracting data from Excel files
---------------------------------------------------------------------------------
#coding=utf-8
import xlrd
import os, types, datetime
#excel存放目录
dir = u'D:\\temp\\excel'
......