特色模块
一、JSON & Pickle
二者都是用来对python对象进行json格式的编码或者解码
- json跨语言平台;pickle是Python语言特定,编码后的结果其他语言无法使用
- pickle效率比Json高
二、wsgiref
主要用来处理与wsgi协议相关内容,包括处理环境变量、处理回应头信息、启动http server以及处理request头信息
def run(addr, port, wsgi_handler, ipv6=False, threading=False): server_address = (addr, port) if threading: httpd_cls = type(str('WSGIServer'), (socketserver.ThreadingMixIn, WSGIServer), {}) else: httpd_cls = WSGIServer httpd = httpd_cls(server_address, WSGIRequestHandler, ipv6=ipv6) httpd.set_app(wsgi_handler) httpd.serve_forever()
三、 signal
软中断信号(signal,又简称为信号)用来通知进程发生了异常事件。进程之间可以互相通过系统调用kill发送软中断信号。内核也可以因为内部事件而给进程发送信号,通知进程发生了某个事件。注意,信号只是用来通知某进程发生了什么事件,并不给该进程传递任何数据。
signal一般不能跟线程很好的合作,因为操作系统的特性,只能主线程接收得到信号
关于信号机制、产生原因参考: http://blog.csdn.net/Thanksgining/article/details/41824475
应用场景:
1、进程间通信
import signal import os import time def receive_signal(signum, stack): print 'Received:', signum # Register signal handlers signal.signal(signal.SIGUSR1, receive_signal) signal.signal(signal.SIGUSR2, receive_signal) # Print the process ID so it can be used with 'kill' # to send this program signals. print 'My PID is:', os.getpid() while True: print 'Waiting...' time.sleep(3) 启动脚本之后,在shell中输入 kill -USR1 $pid kill -USR2 $pid kill -INT $pid
2、为耗时操作制定超时机制
import signal
import time
def handler(signo, frame):
print "got signal", signo
signal.signal(signal.SIGALRM, handler)
signal.alarm(2) # 强制在2秒后执行handler()函数
now = time.time()
time.sleep(200)
print "slept for", time.time() - now, "seconds"
got signal 14
slept for 1.99262607098 seconds
-------------------------------------------
3、在服务器关闭时候,做一个钩子,处理部分事情
import signal import time import sys import threading #想捕捉的信号编号 signum = int(sys.argv[1]) class ThreadTest(threading.Thread): def __init__(self): threading.Thread.__init__(self) def run(self): while True: print "i am ok" time.sleep(1) def myhandle(signum=0, e=0): """处理信号的函数""" print 'i will kill myself' print 'receive signal: %d at %s' % (signum, str(time.ctime(time.time()))) sys.exit() if __name__ == "__main__": signal.signal(signum, myhandle) tt = ThreadTest() tt.start() while True: time.sleep(1)
四、 Functional Programming
分为三个模块,itertools、functools、operator
itertools主要用于数据循环处理方面,包括生成无限序列、filter、find以及排列组合。它的实现基本都是基于yield,所以比较省内存。
functools主要用于补充或修正函数方面,所以它一般入参会有函数,返回值也是函数。这符合函数式编程思想。