当前代码在工作当中没有太大的含义,但是对于大家理解协程的基础概念是相当有好处的 。

协程最直接的可以理解为程序当中一个没有返回的功能块儿。

我们之前有学过多线程,所谓的多线程不论是异步并发,还是并发强调的时候,都将功能放到不同的线程上分别运行 。

但是协程不是这样的,协程强调的是在同一个线程上进行运行,这样免去了线程生产、消费、抛弃的损耗。

站在生产消费者模式来看,多线程主张的是生产者生产: 生产的内容放入缓存, 然后取出使用

协程的主张是:生产者生产,然后生产函数终止,然后消费函数启动。消费完成接着生产

闲话不多说,上代码。提前祝大家节日快乐

import requests
from time import sleep
from lxml import etree
​
def setUp(fun):"""启动生成器:param fun: 生成器函数"""def inner(**kwargs):k = fun(**kwargs)  #调用生成器next(k) #执行一次,效果类似初始化return kreturn inner
​
@setUp
def getSrc():"""根据内容获取链接"""a = 1while True:content = yield ahtml = etree.HTML(content)imglist = html.xpath('//div[@id="content-left"]//img')for img in imglist:src = "http"+img.attrib.get("src")print(src)
@setUp
def getData():"""根据地址获取内容:return:"""while True:url = "https://www.qiushibaike.com/pic/page/%s/?s=5144861"page = yield urlif page == 1:Referer = "https://www.qiushibaike.com"url = "https://www.qiushibaike.com/pic/"else:Referer = url%pageurl = url % pageprint(url)headers = {"Referer": Referer,"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",}request_data = requests.get(url = url,headers = headers)content = request_data.contentimg = getSrc()img.send(content)sleep(1)
​
def getPage():"""启动,获取所有的页码"""d = getData()page = 0while page < 35:page += 1d.send(page)
​
if __name__ == "__main__":getPage()

大家可以跑一下看看,赏心悦目!

Python协程理解、基于爬虫举例相关推荐

  1. python异步爬虫_Python实现基于协程的异步爬虫

    Python实现基于协程的异步爬虫 一.课程介绍 1. 课程来源 本课程核心部分来自<500 lines or less>项目,作者是来自 MongoDB 的工程师 A. Jesse Ji ...

  2. python3异步协程爬虫_Python实现基于协程的异步爬虫

    Python实现基于协程的异步爬虫 一.课程介绍 1. 课程来源 本课程核心部分来自<500 lines or less>项目,作者是来自 MongoDB 的工程师 A. Jesse Ji ...

  3. python 协程可以嵌套协程吗_Python实战异步爬虫(协程)+分布式爬虫(多进程)

    引言:我们在写爬虫时常会遇到这样的问题,当需要爬取多个URL时,写一个普通的基于requests库的爬虫程序爬取时间会很长.因为是顺序请求网页的,而网页请求和获得响应过程比较耗费时间,程序不得不等待获 ...

  4. c++ 协程_理解Python协程(Coroutine)

    由于GIL的存在,导致Python多线程性能甚至比单线程更糟. GIL: 全局解释器锁(英语:Global Interpreter Lock,缩写GIL),是计算机程序设计语言解释器用于同步线程的一种 ...

  5. python 协程 php,python3.x,协程_python协程练习部分代码的理解?,python3.x,协程,asyncio - phpStudy...

    python协程练习部分代码的理解? import asyncio import threading async def wget(host): print('wget {}'.format(host ...

  6. python协程和异步编程

    文章目录 协程 & 异步编程(asyncio) 1. 协程的实现 1.1 greenlet 1.2 yield 1.3 asyncio 1.4 async & awit 1.5 小结 ...

  7. python协程异步原理_简单介绍Python的Tornado框架中的协程异步实现原理

    Tornado 4.0 已经发布了很长一段时间了, 新版本广泛的应用了协程(Future)特性. 我们目前已经将 Tornado 升级到最新版本, 而且也大量的使用协程特性. 很长时间没有更新博客, ...

  8. python 协程原理_Python协程greenlet实现原理

    greenlet是stackless Python中剥离出来的一个项目,可以作为官方CPython的一个扩展来使用,从而支持Python协程.gevent正是基于greenlet实现. 协程实现原理 ...

  9. python gevent async_谈谈Python协程技术的演进

    原标题:谈谈Python协程技术的演进 Coding Crush Python开发工程师 主要负责岂安科技业务风险情报系统redq. 引言 1.1. 存储器山 存储器山是 Randal Bryant ...

最新文章

  1. 使用神经网络提取PDF表格工具来了,支持图片,关键是能白嫖谷歌GPU资源
  2. Android Studio 更换国内源下载依赖库
  3. docker 网络 不好用 docker: Error response from daemon: failed to create endpoint jovial_wing on network b
  4. hdfs如何查找指定目录是否文件_hadoop实战教程-HDFS文件系统如何查看文件对应的block...
  5. Joint Consensus两阶段成员变更的单步实现
  6. Linux中的.bash_ 文件的详细说明
  7. neo4j入门(一)概述
  8. 从使用Python开发一个Socket示例说到开发者的思维和习惯问题
  9. 歌评-《胧月夜》-神前暁
  10. BLOBS表空间数据查询
  11. React中文文档之Lifting State Up
  12. 域服务器文件备份,怎么备份域服务器?
  13. 超级无敌qmail安装大法,详尽之极
  14. C++ Lua库 源码编译及使用(VS2019)
  15. 二维图形旋转公式的推导
  16. 零代码—0代码—无代码平台是什么?怎么选?
  17. C#打印条码BarTender SDK打印之路和离开之路(web平凡之路)
  18. HDU-1495-非常可乐
  19. FCK编辑器在项目中的引入
  20. 数据结构与算法基础 基本概念

热门文章

  1. w8计算机主程序在哪里,Win8怎么打开运行窗口_Win8运行在哪里打开?-192路由网
  2. 计算机英语作文150字,人工智能150字英语作文
  3. 3.Libgdx扩展学习之Box2D_夹具
  4. 阅读笔记:Towards Environment Independent Device Free Human Activity Recognition
  5. swagger不显示接口的可能性
  6. CSS 滚动条样式美化
  7. influxdb中将数据导出csv格式数据
  8. hdu 4859 海岸线 Bestcoder Round 1
  9. 【Java面试八股文宝典之基础篇】备战2023 查缺补漏 你越早准备 越早成功!!!——Day10
  10. 清空stringBuilder