Twisted adbapi回调函数无效的问题

softadmin 2017-5-21 1200

Twisted adbapi回调函数无效,不执行。

本人一贯主张简洁明了的编程思维习惯。简单的思路实现,可以减少很多bug。当然,这里说的是思路简单,而不是很多懒惰者所说的,“一行代码搞定”、“整个系统仅仅几百行代码”等等。简单的思路,也可能需要大量的代码,但核心是思路简单、清晰,避免无谓的繁杂的流程带来的不可预知的后果。

所以,对于不同的应用场景,同样的功能,实现思路和方法必然是不一样的。比如,同样的写日志文件,大部分人可能直接写log文件了,当然这也足够了,虽然可能会导致日志错乱,但影响不大。而也有一部分人觉得写日志的系统开销大,就单独起一个线程去写日志。另外更多的人,可能不管三七二十一,找个开源库简单用一下,不明就里。
其实这些方法都可以,关键还是得用对场景。比如普通的客户端程序,日志量本身就很少,运行一天也就几百行log,这种情况下,单独起一个线程 显然是浪费资源,虽说空闲线程的系统开销并不大,但如果大家都这样玩,用户的电脑就不堪重任了,这也是目前,电脑配置越来越高,但是各种软件的系统资源开销越来越大的原因,虽然电脑配置提高了很多,但用户可能感觉还是很卡。而如果是服务器程序,即使开单独的日志线程,如果日志量过大,系统也会受到影响,首先是IO,大量的磁盘IO会占用IO资源,从而影响正常的功能,其次是单个日志文件大小,当单个日志文件超过一定大小之后,追加数据的资源消耗是很大的(虽然有技术手段可以规避),最后是日志文件夹,一个日志文件夹里面的堆积大量的日志文件,也会严重拖累系统,有多严重 取决于文件数量和系统配置了。
这些看似简单的东西,一旦因为这些触发问题,其风险非常大。而对于新人来说,遇到这样的问题,往往猝不及防。


回归正题。Twisted adbapi这个库,作为大量的数据库操作而言,是不错的,但是对于一般的程序,使用这个库显然不合适。本人希望使用里面的连接池,所以不得已而用之。为了达到阻塞的效果,我在主线程使用了time.sleep等待回调,但是回调函数始终不执行。想想,time.sleep会阻止apc的执行,因此导致回调函数无效!
换用thread event,结果其他线程又执行了其他的task。更换成mysqldb,自己实现重连等功能。
最新回复 (0)
返回