易截截图软件、单文件、免安装、纯绿色、仅160KB

[原创]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模块将被重新解释字节码。并再执行模块级定义的执行语句(译注:由此应
    认识到在模块级就编写函数调用和类对象生成是多么


相关文档:

在ubuntu上编译vim并带有python支持

ubuntu10.05出来了这两天一直在折腾,显示wubi无反应,然后从硬盘安装期间又遇到grub错误等问题。安装成功后搞个中文输入法就老半天,最后使用Pinyin这个还算好用,有点想搜狗就是没什么词库。最恶心的还是vim的问题,用apt-get install vim装的vim不支持系统剪切板,只好从源代码编译,可是我尝试了很多次总是没有python支 ......

用 Python 3 写的命令行百度词典

今天是第二天自己看关于Python了,看见一个Python2写的百度词典,我也用Python 3 写了一个。真的很小巧,呵呵,很好的语言。
不知道怎么上传代码格式的,就上传文本了:
# -*- coding: utf8 -*-
import urllib.parse
import urllib.request
def search(word):
    #word = input("输入你要查询的 ......

Python正则表达式

正则表达式是个魔鬼,也是个天使。在你没有掌握它之前,它是魔鬼,在你掌握它后,它是天使,但是,时
不时还是要跳出来,给你调皮捣蛋一番。


一个正则表达式就是由普通字符以及特殊字符组成的文字模式,该模式描述在查找文字主体时待
匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的 ......

用Python直接写UTF 8文本文件

当我们这样建立文件时
f =
file('x1.txt', 'w')
f.write(u'中文')
f.colse()

接结果应该是类似
    f.write(u'中文')
UnicodeEncodeError: 'ascii'
codec can't encode characters in position 0-16: ordinal not in
range(128)
要直接写 utf-8 文件怎么办呢?
import codecs
f = codecs. ......

Python 中文字符串的截取

def
subString
(s,
length):
   
us = unicode(s, 'utf-8
')
    gs =
us.encode('gb2312
')
    n = int(length)
   
t = gs[:n]
    while True
:
        try
:
  &nb ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号