即使使用了类似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一番吧。

 

^_^.

 

相关文章:

  • 2022-12-23
  • 2021-07-22
  • 2021-06-20
  • 2022-02-07
  • 2021-12-17
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-12-16
  • 2022-12-23
  • 2021-11-11
  • 2021-07-02
  • 2022-12-23
相关资源
相似解决方案