Python Another Digest(3)

  • Python Another Digest3
    • 序列化工具
    • SQL支持
    • 网络编程
      • 异步IO
    • 代码分析
      • 代码测试
      • 代码分析
      • Python扩展
    • 杂项

Python Another Digest(3)

序列化工具

  • shelve;
  • pickle(依赖shelve)
  • json
  • msgpack(轻量型,替代json)

SQL支持

PEP248 DBAPI 统一接口

三个全局变量: [apilevel, threadsafety, paramstyle]
异常类: [StandardError, Warning, Error,
        InterfaceError, DatabaseError,
        DataError, OperationalError,
        IntegrityError, ProgrammingError,
        NotSupportedError]
基础方法: .connect 参数 user, password, host, port, database
    .close, .commit, .rollback .cursor
    cursor方法: exec(重要) 执行sql语句
一般自带sqlite

网络编程

  • socket 模块
  • urlretrieve(url, local_filename) 保存网页到本地文件
  • stackless python(microthreads) 类线程,估计在Python内部进行(伪)线程的切换,达到多线程,共享内存;

异步I/O

  • select
    rs, ws, es = select.select(inputs, [], [], timeout)
                               输入, 输出,stderr错误
    来一个accept, 就放进inputs;
  • epoll (只有类unix支持)
    poll 比 select 简单
   fd, event = poll()
   p = select.poll()
   p.register(s)
   events = p.poll()  # 重点是event, 增加了信息
   for fd, event in events:
EVENT集合:
[POLLIN 读
 POLLPRI 读 紧急
 POLLOUT 可阻塞写
 POLLERR 错误
 POLLHUB 挂起
 POLLNVAL 无效请求

其实select 和 poll 没啥区别, 只是把socket通过p.register放poll内部去封装了一下;
Twisted 异步I/O框架,又一层封装;

代码分析

单元测试 -> 源代码检查 -> 检查
PyChecker + PyLint

代码测试

  • unittest 与java junit 同源
  • doctest: 把docstring中像交互式的部分当测试
  • 调用外部程序
from subprocess import Popen, PIPE
Popen(cmd, stdout=PIPE, stderr=PIPE)

代码分析

其实业务中代码慢的主要原因是:
1. I/O 数据库,磁盘,网络;
2. 过大循环 for each(几万条)

  • proifle
  • hotshot(c实现)

Python扩展

代码出现性能瓶颈时,用C实现关键部分

  • Jython 和java合作
  • IronPython 在.NET环境
  • Cpython( SWIG, 严格api)
    使用已有c代码,相当于 adapter

杂项

pattern = re.compile('( .*?)(.*?)')
for a, b in p.findall(text):

re.findall 居然返回 tuple, 长度与group相同(括号个数)
  • Tidy 把不规范的html, 变成规范的 xhtml
  • Beautiful Soup
  • XPath xml分析工具
  • cgi可直接运行脚本

你可能感兴趣的:(python)