高性能异步爬虫02

单线程+异步协程(推荐):

-asyncio的一些关键字的说明:

  • event_loop 事件循环:程序开启一个无限循环,把一些函数注册到事件循环上,当满足事件发生的时候,调用相应的协程函数
  • coroutine 协程:协程对象,指一个使用async关键字定义的函数,它的调用不会立即执行函数,而是会返回一个协程对象。协程对象需要注册到事件循环,由事件循环调用。
  • task 任务:一个协程对象就是一个原生可以挂起的函数,任务则是对协程进一步封装,其中包含了任务的各种状态
  • async:async定义一个协程
  • awati:await用于挂起阻塞方法执行。

测试1:

import asyncio
async def do_something(sth):
    print("doing %s"%sth)
    print("done")
c = do_something("eating")#该方法不会执行 返回一个协程对象
print(c)

#结果
sys:1: RuntimeWarning: coroutine ‘do_something‘ was never awaited
<coroutine object do_something at 0x0000014EE2EFD1C8>

测试2:

import asyncio
async def do_something(sth):
    print("doing %s"%sth)
    print("done")
c = do_something("eating")#该方法不会执行
loop = asyncio.get_event_loop()#创建loop
loop.run_until_complete(c)#协程对象c 扔到loop中 触发执行

#结果
doing eating
done

测试3(task的使用) 通过loop创建:

import asyncio
async def do_something(sth):
    print("doing %s"%sth)
    print("done")
c = do_something("eating")
loop = asyncio.get_event_loop()
task = loop.create_task(c)
print(task) #pending 未执行
loop.run_until_complete(task)
print(task) #finished 执行完毕

#结果
<Task pending coro=<do_something() running at C:/Users/86155/PycharmProjects/chapter_7/mybs4.py:48>>
doing eating
done
<Task finished coro=<do_something() done, defined at C:/Users/86155/PycharmProjects/chapter_7/mybs4.py:48> result=None>

测试4(future的使用)通过 asynico创建: 

import asyncio
async def do_something(sth):
    print("doing %s"%sth)
    print("done")
c = do_something("eating")
loop = asyncio.get_event_loop()
task = asyncio.ensure_future(c)
print(task)
loop.run_until_complete(task)
print(task)
#结果
<Task pending coro=<do_something() running at C:/Users/86155/PycharmProjects/chapter_7/mybs4.py:48>>
doing eating
done
<Task finished coro=<do_something() done, defined at C:/Users/86155/PycharmProjects/chapter_7/mybs4.py:48> result=None>

测试5(回调)

import asyncioasync def do_something(sth):    print(‘doing %s‘%sth) ##1    print(‘done‘) ##2    return sth #回调函数中的 result()def call_bask(task):        print(task.result())c = do_something(‘running‘)loop = asyncio.get_event_loop()task = loop.create_task(c)#回调函数绑定任务对象task.add_done_callback(call_bask)loop.run_until_complete(task)

#结果

doing running
done
running

 

  

原文地址:https://www.cnblogs.com/Jnhnsnow/p/11616547.html

时间: 2024-11-09 10:30:26

高性能异步爬虫02的相关文章

高性能异步爬虫

如何提升requests模块爬取数据的效率 多进程或者多线程(不建议) 线程池或者进程池(适当使用) 单线程+异步协程(推荐) 示例爬取梨视频 import requests import re from lxml import etree from multiprocessing.dummy import Pool import random headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebK

爬虫-高性能异步爬虫

异步爬虫方式 目的:在爬虫中使用异步实现高性能的数据爬取操作 异步爬虫方式: 多进程,多线程(不建议) 好处:可以为先关阻塞操作单独开启进程或者线程,阻塞操作就可以异步执行 坏处:无法无限制开启 线程池,进程池(适当使用) 好处:可以降低系统对进程或者线程创建和销毁的评率,进而降低系统开销 坏处:池中线程或进程的数量有上线 单线程+异步协程(推荐) event_loop:事件循环,相当于一个无限循环,我们可以把一些函数注册到这个事件循环上, 当满足某些条件的时候,函数就会被循环执行. corou

Python实现基于协程的异步爬虫

一.课程介绍 1. 课程来源 本课程核心部分来自<500 lines or less>项目,作者是来自 MongoDB 的工程师 A. Jesse Jiryu Davis 与 Python 之父 Guido van Rossum.项目代码使用 MIT 协议,项目文档使用 http://creativecommons.org/licenses/by/3.0/legalcode 协议. 课程内容在原文档基础上做了稍许修改,增加了部分原理介绍,步骤的拆解分析及源代码注释. 2. 内容简介 传统计算机

Voovan 是一个高性能异步网络框架和 HTTP(Java)

Voovan 是一个高性能异步网络框架和 HTTP 服务器框架,同时支持 HTTP 客户端抓取.动态编译支持.数据库访问封装以及 DateTime.String.Log.反射.对象工具.流操作.文件操作.异步双向通道等功能.旨在提供可靠.方便.可单元测试的代码.它是一个无任何依赖的独立工具包,希望能够方便广大开发者快速的实现应用. 作者:@愚民日记 地址:http://git.oschina.net/helyho/Voovan http://www.oschina.net/news/80909/

(转)新手写爬虫v2.5(使用代理的异步爬虫)

开始 开篇:爬代理ip v2.0(未完待续),实现了获取代理ips,并把这些代理持久化(存在本地).同时使用的是tornado的HTTPClient的库爬取内容. 中篇:开篇主要是获取代理ip:中篇打算使用代理ip,同时优化代码,并且异步爬取内容.所以接下来,就是写一个:异步,使用代理的爬虫.定义为:爬虫 v2.5 为什么使用代理 在开篇中我们爬来的代理ip怎么用? 在需要发送请求的时候,需要把请求,先发送到代理服务器(通过代理ip和端口),再由代理服务器请求目标网站.目标网站返回响应的时候也是

利用aiohttp制作异步爬虫

简介asyncio可以实现单线程并发IO操作,是Python中常用的异步处理模块.关于asyncio模块的介绍,笔者会在后续的文章中加以介绍,本文将会讲述一个基于asyncio实现的HTTP框架--aiohttp,它可以帮助我们异步地实现HTTP请求,从而使得我们的程序效率大大提高.本文将会介绍aiohttp在爬虫中的一个简单应用.在原来的项目中,我们是利用Python的爬虫框架scrapy来爬取当当网图书畅销榜的图书信息的.在本文中,笔者将会以两种方式来制作爬虫,比较同步爬虫与异步爬虫(利用a

爬虫02 /数据解析

目录 爬虫02 /数据解析 1. 数据解析概述 2. 正则实现的数据解析 3. bs4实现数据解析 4. xpath解析 总结: 爬虫02 /数据解析 1. 数据解析概述 什么是数据解析,数据解析可以干什么? 概念:就是将一组数据中的局部数据进行提取. 作用:使用来实现聚焦爬虫 数据解析的通用原理 问题:html展示的数据可以存储在哪里? 标签之中 属性中 1.标签定位 2.取文本或者取属性 数据解析的常用方法 re bs4 xpath pyquery 2. 正则实现的数据解析 需求:http:

深入理解协程(四):async/await异步爬虫实战

本文目录: 同步方式爬取博客标题 async/await异步爬取博客标题 本片为深入理解协程系列文章的补充. 你将会在从本文中了解到:async/await如何运用的实际的爬虫中. 案例 从CSDN上批量爬取指定文章的标题.文章列表如下: urls = [ 'https://blog.csdn.net/Jmilk/article/details/103218919', 'https://blog.csdn.net/stven_king/article/details/103256724', 'h

.Net中的并行编程-4.实现高性能异步队列

上文<.Net中的并行编程-3.ConcurrentQueue实现与分析>分析了ConcurrentQueue的实现,本章就基于ConcurrentQueue实现一个高性能的异步队列,该队列主要用于实时数据流的处理并简化多线程编程模型.设计该队列时考虑以下几点需求(需求来自公司的一个实际项目): 1. 支持多线程入队出队,尽量简化多线程编程的复杂度. 2. 支持事件触发机制,数据入队时才进行处理而不是使用定时处理机制, 而且内部能阻塞消费者线程. 3. 出队时数据处理的顺序要保证和入队时是一致