摘要:
1。 Python的select()方法直接调用操作系统的IO接口,它监控sockets,open files, and pipes(所有带fileno()方法的文件句柄)何时变成readable 和writeable, 或者通信错误,select()使得同时监控多个连接变的简单,并且这比写一个长循 阅读全文
摘要:
论事件驱动与异步IO 通常,我们写服务器处理模型的程序时,有以下几种模型: (1)每收到一个请求,创建一个新的进程,来处理该请求; (2)每收到一个请求,创建一个新的线程,来处理该请求; (3)每收到一个请求,放入一个事件列表,让主进程通过非阻塞I/O方式来处理请求。(启动一个协程) 上面的几种方式 阅读全文
摘要:
1. 通过Gevent实现单线程下的多socket并发。 server 端: Client 端: 运行结果:实现了并发 2. 阅读全文
摘要:
1.简单爬虫 运行结果: 2.爬多个网页 运行结果: 3.测试运行时间: 运行结果:通过时间看到也是串行运行的。gevent默认检测不到 urllib 进行的是否是io操作。 4.同步与异步的时间比较: 运行时间:几乎差不多,看不出异步的优势。 5.因为gevent默认检测不到 urllib 进行的 阅读全文
摘要:
Gevent: Gevent 是一个第三方库,可以轻松通过gevent实现并发同步或异步编程,在gevent中用到的主要模式是Greenlet, 它是以C扩展模块形式接入Python的轻量级协程。 Greenlet全部运行在主程序操作系统进程的内部,但它们被协作式地调度。在greenlet 中用sw 阅读全文
摘要:
yield()是自己写的协程,Greenlet( )是已经封装好了的协程。 协程:遇到 I/O 操作就切换到别的地方了(先去处理其他携程去了)。等原协程的 I/O 操作一完成就切回去。这样就把 I/O的时间给节省出来了。 Greenlet:手动挡 gevent: 自动挡 运行结果: 阅读全文
摘要:
协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈。 线程切换的时候会保存到CPU里面。 因此: 协程能保留上一次调用时的状态(即所有局部状态的一个特定组合),每次过程重入时,就相当于进入上一次调用的状态,换种说法:进入上 阅读全文