使用ANTLR做一个简单的Python SQL语法解析器

最近在做一个数据库相关的平台(按照潮流现在平台应该叫做SAAS平台。。。),对于数据库相关的平台来说,SQL的语法分析就比较重要了,不管是从格式化SQL,还是分析SQL所涉及到的表、列来做安全审计,或者是自助SQL的提交所涉及到的语法检查及内部规范要求,都需要用到语法分析。 Continue reading

多进程socket共用

最近遇到一个需求:我的程序需要接收某个节点传来的UDP报文(来自sFlow),然后对报文进行纯CPU密集型的分析。在某些时候UDP报文的数量可能会很大,另外为了分析结果的准确我不希望太多的丢包。本来是想用threading直接通过Queue来个生产者消费者模式的,但由于是CPU密集型的分析工作所以对于Python来说这样效率不会有多少提高。因此考虑多进程。 Continue reading

Python能否实现超时,以及一些关于线程知识的复习

最近在试着写一个简单的分布式数据库(主要是受了OceanBase的影响),其中日志系统打算基于Raft来写。Raft的算法中有很多场景是需要基于超时来实现的,比如选举超时、心跳维护超时等,因此自然就想试着写一个通用的超时模块。这篇文章就来说说小秦在实现超时时候遇到的困难以及一些感想。(注意,Raft的超时可以通过socket.settimeout来设置,这里讨论的超时只的是针对一般方法的超时) Continue reading

Python中的迭代器创建

创建迭代对象有两种方法,分别是使用iter方法和直接实现一个class。

先看iter方法。iter有两种形式:一个是只有一个参数的,要求是这个参数必须是一个序列对象,每次迭代其实就是返回一个序列的下一个值。还有一个是有两个参数的,第一个是个callable对象,每次迭代就是返回这个callable对象的返回值,第二个参数是一个结束值,当callable对象的返回值是这个值的时候就结束迭代。
例子(使用iter并传递一个序列对象): Continue reading