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
rs, ws, es = select.select(inputs, [], [], timeout)
输入, 输出,stderr错误
来一个accept, 就放进inputs;
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
from subprocess import Popen, PIPE
Popen(cmd, stdout=PIPE, stderr=PIPE)
其实业务中代码慢的主要原因是:
1. I/O 数据库,磁盘,网络;
2. 过大循环 for each(几万条)
代码出现性能瓶颈时,用C实现关键部分
pattern = re.compile('( .*?)(.*?)')
for a, b in p.findall(text):
re.findall 居然返回 tuple, 长度与group相同(括号个数)