让数据库操作变成非阻塞的

即使使用了类似tornado这样的非阻塞io web服务器,能让我们的web性能提供很多,但是在实际应用中与测试的效果相差很远,应该是说我们的测试考虑非常不全面。

现在的web应用几乎不可能少了数据库访问操作,而数据库访问操作却是阻塞的, 如MySQLdb,显然,类似tornado,stackless这些协程方式编写的web,性能会受到大大的制约。

解决方案:让数据库操作变成非阻塞的

eventlet中的db_pool实现是一个很好的开始。

它又是如何实现的呢?即使eventlet实现了非阻塞的socket(因为MySQLdb没有使用到),显然MySQLdb的C代码实现肯定是阻塞的。客观条件下无法变成非阻塞的,只有改变一下思路,使用线程来达到非阻塞不就可以了?eventlet不仅有线程实现版本,还有一个进程的实现版本(SaranwrappedConnectionPool),有兴趣的pythonic可以看看db_pool源代码 (http://bitbucket.org/which_linden/eventlet/src/tip/eventlet/db_pool.py),YD一番吧。

 

^_^.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值