• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

竹千代

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

特色模块

一、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主要用于补充或修正函数方面,所以它一般入参会有函数,返回值也是函数。这符合函数式编程思想。

 

posted on 2015-04-27 19:30  竹千代  阅读(166)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3