注:
注意:python内存回收交给一段独立的代码即垃圾回收器(包含引用计数器和循环垃圾收集器),引用计数在归零时并不会立即清除(可能有循环调用)
不必纠结循环引用收集,只需记住垃圾回收器帮你自动清理内存。
x=1 #创建内存变量1,将变量1的引用传给x,此刻1的引用计数为1
y=x #1的引用计数增加到2
y=2 #创建新的内存变量2,将变量2的引用传给y,原本指向1的y,此刻给了2,所以1的引用计数减少到了1
del x #删除了内存对象1的引用x,此刻1再无引用,此刻它就成了python解释器回收的目标


python中使用对象模型来存储数据,用来生成数据类型的工厂函数本质上是类,新建数据的结果本质是实例化一个对象
对象有三种特性
定义:允许作为名字的有效字符串集合
关键字表:
内建:由解释器自动导入(提供基本功能),可以看作全局变量,
下划线对于解释器来说有特殊意义,而且是内建标识符所使用符号,不建议自定义变量以下划线开头
但是如果是类中的私有变量,__xxx将会是一个好习惯
补充:
系统变量__name__会根据python文件被加载方式的不同得出不同的值
#_*_coding:utf-8_*_
#!/usr/bin/env python
'''
This is an example module
'''
import sys,os
debug=True
class Test:
'''
test class
'''
pass
def main():
'''
test func
:return:
'''
pass
if __name__ == '__main__':
main()
]]>RPC是Remote Procedure Call的缩写,翻译成中文为:远程方法调用。
它是一种在本地机器上调用远端机器上的一个过程(方法)的技术,这个过程也被大家称为“分布式计算”,是为了提高各个分立机器的“互操作性”而发明出来的技术。
XML-RPC的全称是XML Remote Procedure Call,即XML远程方法调用。
它是一套允许运行在不同操作系统、不同环境的程序实现基于Internet过程调用的规范和一系列的实现。这种远程过程调用使用http作为传输协议,XML作为传送信息的编码格式。Xml-Rpc的定义尽可能的保持了简单,但同时能够传送、处理、返回复杂的数据结构。XML- RPC(http://www.xmlrpc.com)是由美国UserLand公司指定的一个RPC协议。简单的理解是:将数据定义为xml格式,通过http协议进行远程传输。
一般使用在服务器端,这个模块用来构造一个最基本的XML-RPC服务器框架。
一般使用在客户端,这个模块用来调用注册在XML-RPC服务器端的函数,xmlrpclib并不是一个类型安全的模块,无法抵御恶意构造的数据,这方面的一些处理工作需要交给开发者自己。
大致用法:使用SimpleXMLRPCServer模块运行XMLRPC服务器,在其中注册服务器提供的函数或者对象;然后在客户端内使用xmlrpclib.ServerProxy连接到服务器,想要调用服务器的函数,直接调用ServerProxy即可。
简单实例:hello xmlprc
服务器端:xmlrpc_server.py
import SimpleXMLRPCServer
class MyObject:
def sayHello(self):
return "hello xmlprc"
obj = MyObject()
server = SimpleXMLRPCServer.SimpleXMLRPCServer(("localhost", 8088))
server.register_instance(obj)
print "Listening on port 8088"
server.serve_forever()客户端:xmlrpc_client.py
import xmlrpclib
server = xmlrpclib.ServerProxy("http://localhost:8088")
words = server.sayHello()
print "result:" + words打开一个终端,输入命令,运行服务器端程序:
chmod u+x xmlrpc_server.py
python xmlrpc_server.py打开另一个新的终端,输入命令,运行客户端程序:
chmod u+x xmlrpc_client.py
python xmlrpc_client.py可以看到客户端控制台上输出了:hello xmlprc。如图:
附:
SimpleXMLRPCServer是一个单线程的服务器。这意味着,如果几个客户端同时发出多个请求,其它的请求就必须等待第一个请求完成以后才能继续。
若修改服务器端如下:
from SimpleXMLRPCServer import SimpleXMLRPCServer
from SocketServer import ThreadingMixIn
class ThreadXMLRPCServer(ThreadingMixIn, SimpleXMLRPCServer):pass
class MyObject:
def sayHello(self):
return "hello xmlprc"
obj = MyObject()
server = ThreadXMLRPCServer(("localhost", 8088), allow_none=True)
server.register_instance(obj)
print "Listening on port 8088"
server.serve_forever()
]]>