协程+IO切换+小爬虫】的更多相关文章

from gevent import monkeymonkey.patch_all() import geventimport requests def f1(url): print(f'GET:{url}') msg = requests.get(url) # 获取的是网站的数据长度 print(len(msg.content)) gevent.joinall([ gevent.spawn(f1, 'https://www.python.org'), gevent.spawn(f1, 'htt…
from gevent import monkey # 以后代码中遇到IO都会自动执行greenlet的switch进行切换 monkey.patch_all() import requests import gevent def get_page1(url): ret = requests.get(url) print(url,ret.content) def get_page2(url): ret = requests.get(url) print(url,ret.content) def…
协程:单线程下实现并发并发:伪并行,遇到IO就切换,单核下多个任务之间切换执行,给你的效果就是貌似你的几个程序在同时执行.提高效率任务切换 + 保存状态并行:多核cpu,真正的同时执行串行:一个任务执行完在执行另外一个任务 多线程多进程下的任务切换+保存状态是操作系统 协程:单线程下实现并发,最大化线程的效率,检测IO并自动切换,程序级别的任务切换,之前多线程多进程都是系统级别的切换,程序级别的切换比系统要快很多greenlet(鬼木雷特) 任务切换 + 保存状态,没有实现IO自动切换,swit…
0.基于socket发送Http请求 import socket import requests # 方式一 ret = requests.get('https://www.baidu.com/s?wd=alex') # 方式二 client = socket.socket() # 百度创建连接: 阻塞 client.connect(('www.baidu.com',80)) # 问百度我要什么? client.sendall(b'GET /s?wd=alex HTTP/1.0\r\nhost:…
协程: 1 单线程来实现并发---协程: 协程:是单线程下的并发,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是一种用户态的轻量级线程, 即协程是由用户程序自己控制调度的 只用一个主线程(很明显可利用的cpu只有一个)情况下实现并发:切换+保存状态     对于单线程下,我们不可避免程序中出现io操作,但如果我们能在自己的程序中(即用户程序级别,而非操作系统级别) 控制单线程下的多个任务能在一个任务遇到io阻塞时就切换到另外一个任务去计算,这样就保证了该线程能够最大限度…
一.socket(单链接) 1.socket:应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面:也有人将socket说成ip+port,ip是用来标识互联网中的一台主机的位置,而port是用来标识这台机器上的一个应用程序,ip地址是配置到网卡上的,而port是应用程序开启的,ip与port的绑定就标识了互联网中独一无二的一个应用程序:而程序的pid是同一台机器上不同进程或者线程的标…
1.进程 1.进程可以使用计算机多核 2.进程是资源分配的单位 3.进程的创建要比线程消耗更多的资源效率很低 4.进程空间独立,数据安全性跟好操作有专门的进程间通信方式 5.一个进程可以包含多个线程,线程共享进程资源 6.进程有自己特有资源 7.多进程根据cpu核数不一样可能是并行的 2.线程 1.线程可以使用计算机多核 2.线程是操作系统调度的单位 3.线程切换从系统层面保存和恢复CPU上下文以及每个线程自己的缓存Cache等数据,切换时需要的资源一般效率一般 4.线程使用全局变量通信,必须要…
Gevent Gevent 是一个第三方库,可以轻松通过gevent实现并发同步或异步编程,在gevent中用到的主要模式是Greenlet, 它是以C扩展模块形式接入Python的轻量级协程. Greenlet全部运行在主程序操作系统进程的内部,但它们被协作式地调度. # gevent实现协程遇到io就切换 import gevent def func1(): # 测试访问IO时间 gevent.sleep(2) def func2(): gevent.sleep(1) def func3()…
一.什么是协程? 是单线程下的并发,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是一种用户态的轻量级线程,即协程是由用户程序自己控制调度的. 协程相比于线程切换效率更快了. 本质是线程 能够在多个任务之间切换来节省一些IO时间. 协程中任务之间的切换时间开销要远远小于进程线程之间的切换. 真正的协程模块就是使用greenlet完成切换的. 进程和协程的任务切换由操作系统完成. 协程任务之间的切换由程序完成.  协程任务之间的切换由程序代码完成 , 只有遇到协程模块能识别…
引子: 之前学习过了,线程,进程的概念,知道了在操作系统中进程是资源分配的最小单位,线程是CPU调度的最小单位.按道理来说我们已经算是把CPU的利用率提高很多了.但是我们知道无论是创建多进程还是创建多线程来解决问题,都要消耗一定的时间来创建进程,创建线程,以及管理他们之间的切换. 随着我们对于效率的最求不断提高,基于单线程来实现并发又成为一个新的课题.即只用一个主线程的情况下实现并发.这样就可以节省创建线程进程所消耗的时间. 并发的本质: 切换+保存状态 cpu正在运行一个任务,会在两种情况下切…