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

^_^.

转载于:https://www.cnblogs.com/fengmk2/archive/2009/11/18/nonblocking-database-operation.html

让数据库操作变成非阻塞的相关推荐

  1. 嵌入式驱动之阻塞操作、非阻塞操作

    阻塞 阻塞操作     是指在执行设备操作时若不能获得资源则挂起进程,直到满足可操作的条件后再进行操作. 被挂起的进程进入休眠状态,被从调度器的运行队列移走,直到等待的条件被满足. 非阻塞操作   进 ...

  2. linux 查看进程阻塞,linux进程 阻塞和非阻塞操作

    在我们看全功能的 read 和 write 方法的实现之前, 我们触及的最后一点是决定何时使 进程睡眠. 有时实现正确的 unix 语义要求一个操作不阻塞, 即便它不能完全地进行下去. 有时还有调用进 ...

  3. 设备的阻塞与非阻塞操作

    阻塞操作是指,在执行设备操作时,若不能获得资源,则进程挂起直到满足可操作的条件再进行操作.非阻塞操作的进程在不能进行设备操作时,并不挂起.被挂起的进程进入sleep状态,被从调度器的运行队列移走,直到 ...

  4. 驱动学习(九)字符设备的非阻塞操作

    驱动学习(九)字符设备的非阻塞操作 文章目录 驱动学习(九)字符设备的非阻塞操作 1. 什么是非阻塞操作? 2. 操作 3. 测试 1. 什么是非阻塞操作? 是指在不能进行设备操作时,并不挂起或休眠该 ...

  5. Linux 设备驱动--- 阻塞型字符设备驱动 --- O_NONBLOCK --- 非阻塞标志【转】

    阅读目录 1,以阻塞方式运行: 2,以非阻塞方式运行: 转自:http://blog.csdn.net/yikai2009/article/details/8653697 版权声明:本文为博主原创文章 ...

  6. 查询框赋值后不可编辑_【技巧分享】阻塞赋值与非阻塞赋值

    原创 小黑同学 明德扬FPGA科教 关于阻塞赋值和非阻塞赋值的问题,明德扬的学员提得比较多,今天小黑老师专门给大家普及一下阻塞赋值和非阻塞赋值的相关知识. 一.概述 1.阻塞赋值对应的电路往往与触发沿 ...

  7. java多线程11.非阻塞同步机制

    关于非阻塞算法CAS. 比较并交换CAS:CAS包含了3个操作数---需要读写的内存位置V,进行比较的值A和拟写入的新值B.当且仅当V的值等于A时,CAS才会通过原子的方式用新值B来更新V的值,否则不 ...

  8. 同步、异步、阻塞、非阻塞

    一个小故事 故事:小A烧开水. 出场人物:小A出场道具:普通水壶(放在煤气灶上的那种,为了方便简称:水壶):会响的水壶(水烧开了会响的那种,简称:响壶).故事目的:小A要拿开水泡咖啡 小A为了实现目的 ...

  9. IO:同步,异步,阻塞,非阻塞

    IO - 同步,异步,阻塞,非阻塞 都是老生常谈的东西,多通读几遍,理解透彻! 实际上同步与异步是针对应用程序与内核的交互而言的.同步过程中进程触发IO操作并等待(也就是我们说的阻塞)或者轮询的去查看 ...

最新文章

  1. 微软亚研院20周年独家撰文:数据智能的现在与未来
  2. ubuntu安装使用不同版本的gcc
  3. Spire.XLS试用手记
  4. jax-rs jax-ws_JAX-WS入门
  5. 自然语言处理的一些链接
  6. V210 UART TX 流程
  7. plsql常用快捷键
  8. 的文件夹结构_小白指南:WordPress文件及目录结构解析
  9. Spring mvc @RequestHeader
  10. matlab学习笔记杂项一
  11. css中margin标记可以带一个、二个、三个、四个参数,各有不同的含义
  12. 划分数算法概述及习题
  13. 大学微积分考试能用计算机吗,AP微积分考试需要什么样的计算器?
  14. vi编辑文件时如何批量替换字符串
  15. Python——爬取单章小说内容
  16. 微服务4——服务的限流、熔断(Sentinel-三ti no)sca-comsumersca-provider
  17. win10启动项(win10启动项怎么添加)
  18. cle IMP-00015: 由于对象已存在, 下列语句失败
  19. 600G计算机、编程语言网盘分享链接
  20. 实现点击按钮 复制文本内容

热门文章

  1. docker registry push 覆盖_原创 | 全网最实在的docker入门教程四
  2. mysql的存储引擎_Mysql数据库3种存储引擎有什么区别?
  3. 均方根误差有没有单位_1千万年仅误差一秒,这台钟直接影响北斗卫星的导航定位精度...
  4. pip安装requirement.txt
  5. mysql undo log回收_MySQL5.7 可以回收(收缩)undo log回滚日志物理文件空间
  6. 图例放在图的外面_Qt编写自定义控件41-自定义环形图
  7. python list清理列表中的空元素或特定元素
  8. 解决python使用happybase连接hbase报错thriftpy2.transport.base.TTransportException....TSocket read 0 bytes
  9. redis docker安装、进入命令行后启动服务
  10. Bash、Terminal通过tab忽略大小写自动补全命令行提示