易截截图软件、单文件、免安装、纯绿色、仅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模块将被重新解释字节码。并再执行模块级定义的执行语句(译注:由此应
    认识到在模块级就编写函数调用和类对象生成是多么


相关文档:

python 获取本机ip

>>> from socket import socket, SOCK_DGRAM, AF_INET
>>> s = socket(AF_INET, SOCK_DGRAM)
>>> s.connect(('google.com', 0))
>>> s.getsockname()
('192.168.1.113', 43711) 
Linux:
import socket
import fcntl
import struct
def get_ip_address(ifname):
s = ......

python模块之codecs

python对多国语言的处理是支持的很好的,它可以处理现在任意编码的字符,这里深入的研究一下python对多种不同语言的处理。
    有一点需要清楚的是,当python要做编码转换的时候,会借助于内部的编码,转换过程是这样的:
        原有编码 -> 内部编码 ->
目 ......

python读取目录下文件并生成日志

很长的一段代码,但很清楚。哈哈。
import os
from time import strftime
stamp=strftime("%Y-%m-%d %H:%M:%S")
logfile = 'F:\\test\\m-php-framework\\tmp\logs\\error_report.log'
path = 'F:\\test\\'
files = os.listdir(path)
bytes = 0
numfiles = 0
for f in files:
if f.startswith('t'): ......

Python 处理excel并转为table

使用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'
......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号