返回顶部
首页 > 资讯 > 后端开发 > Python >Tornado异步模式
  • 175
分享到

Tornado异步模式

模式Tornado 2023-01-31 00:01:50 175人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

先介绍下背景:由于工作需要,前段时间又写了一段爬虫去获取和更新一些数据。之前爬虫主要用scrapy框架批量爬取一些页面数据,或者用Gevent调用目标站点的接口。偶然看到了Tornado,听说这个框架很强大,所以打算这次爬虫用Tornad

先介绍下背景:由于工作需要,前段时间又写了一段爬虫去获取和更新一些数据。之前爬虫主要用scrapy框架批量爬取一些页面数据,或者用Gevent调用目标站点的接口。偶然看到了Tornado,听说这个框架很强大,所以打算这次爬虫用Tornado试试。不足之处,欢迎指正。

 

总的来说,Tornado是python里面一个轻量的异步非阻塞的框架,性能非常不错,最新版本的异步协程是基于Python内置的asyncio来实现(老版本用装饰器实现异步)。Tornado可以用来做WEB服务,或者利用其异步功能,完成一些异步执行的操作,比如爬虫(PySpider就是基于Tornado实现)。

 

本次任务,涉及到调用百度自然语言理解(NLU)平台UNIT的一些接口,实现一些自动化和批量操作,比如词槽导入导出,开始机器学习训练,批量测试语句等等。没有拿到百度UNIT平台的接口文档,所以只能通过爬虫形式,模拟用户登录,然后进行各种操作。为了让本篇看起来更简洁,本次不打算详细介绍如何爬取百度UNIT平台,统一调用Httpbin(http://www.httpbin.org/get)进行简化。百度UNIT平台的爬虫后续再补充。

 

说了那么多,重点来了。Tornado两种异步模式:

1,add_callback(基于asyncio,资源消耗少,性能还不错)

2,run_in_executor((基于线程池/进程池,性能很好,但是资源消耗要高于add_callback的方案)

 

add_callback方案:

from tornado.ioloop import IOLoop, PeriodicCallback
import requests

# 业务逻辑操作写在这里
def job():
    url    = 'http://www.httpbin.org/get'
    resp   = requests.get(url)
    print(resp.text)


async def runner():
    loop   = IOLoop.current()
#任务派发写在这里 for i in range(10): loop.add_callback(job) print('This will be executed before loop is finished') if __name__ == '__main__': IOLoop.current().run_sync(runner)

 

run_in_executor方案:

from tornado.ioloop import IOLoop, PeriodicCallback
import requests
from concurrent.futures import ThreadPoolExecutor

# 业务逻辑写在这里
def job():
    url    = 'http://www.httpbin.org/get'
    resp   = requests.get(url)
    print(resp.text)


async def runner():
    loop   = IOLoop.current()

    # 也可以用进程池ProcessPoolExecutor
    exectutor  = ThreadPoolExecutor(20)
# 任务派发写在这里 for i in range(10): loop.run_in_executor(exectutor, job) print('This will be executed before loop is finished') if __name__ == '__main__': IOLoop.current().run_sync(runner)

 

--结束END--

本文标题: Tornado异步模式

本文链接: https://lsjlt.com/news/182590.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Tornado异步模式
    先介绍下背景:由于工作需要,前段时间又写了一段爬虫去获取和更新一些数据。之前爬虫主要用Scrapy框架批量爬取一些页面数据,或者用Gevent调用目标站点的接口。偶然看到了Tornado,听说这个框架很强大,所以打算这次爬虫用Tornad...
    99+
    2023-01-31
    模式 Tornado
  • Python的Tornado框架的异步任务与AsyncHTTPClient
    高性能服务器Tornado Python的web框架名目繁多,各有千秋。正如光荣属于希腊,伟大属于罗马。Python的优雅结合WSGI的设计,让web框架接口实现千秋一统。WSGI 把应用(Applicat...
    99+
    2022-06-04
    框架 Python Tornado
  • ASP.NETMVC使用异步TPL模式
    1、MVC中如何使用异步 我们新建一个MVC的项目,我们在Home控制器的Index方法里面读取一个文件的内容,然后返回给用户,我们看下面的代码: /// <summary&g...
    99+
    2024-04-02
  • C#异步编程的三种模式
    使用异步编程,方法调用是在后台运行(通常在线程和任务的帮助下),并且不会阻塞调用线程。异步编程有三种模式:异步模式,基于事件的异步模式和基于任务的异步模式(TAP)。 一.异步模式 ...
    99+
    2024-04-02
  • ASP.NET基于事件的异步模式与异步Action怎么实现
    本篇内容主要讲解“ASP.NET基于事件的异步模式与异步Action怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ASP.NET基于事件的异步模式与异步Action怎么实现”吧!尽管在A...
    99+
    2023-06-17
  • python异步回调模式怎么实现
    在Python中,可以使用多种方式实现异步回调模式,下面介绍两种常见的方法: 使用回调函数:定义一个函数,将其作为参数传递给需要进...
    99+
    2024-02-29
    python
  • Node.js 事件循环中的异步编程模式与反模式
    ...
    99+
    2024-04-02
  • C#中的异步编程模式是什么
    在C#中,异步编程模式是通过async和await关键字来实现的。使用这种方式可以将耗时的操作(例如网络请求、文件操作等)放在一个单...
    99+
    2024-04-03
    C#
  • Python设计模式中单例模式的实现及在Tornado中的应用
    单例模式的实现方式 将类实例绑定到类变量上 class Singleton(object): _instance = None def __new__(cls, *args): if ...
    99+
    2022-06-04
    模式 Python Tornado
  • Java 设计模式之责任链模式及异步责任链详解
    目录一、定义二、普通责任链模式三、异步责任链模式一、定义 责任链模式(Chain of Responsibility Pattern):避免将一个请求的发送者与接受者耦合在一起,让多...
    99+
    2024-04-02
  • JavaScript中实现异步编程模式的方法
    小编给大家分享一下JavaScript中实现异步编程模式的方法,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!JavaScript中实现异步编程模式的方法:1、回调函数,这是异步编程最基本的方法;2、事件监听;3、发布或订阅...
    99+
    2023-06-14
  • tornado执行asyncio异步报错run_forever assert self._self_reading_future is None如何解决
    本篇内容介绍了“tornado执行asyncio异步报错run_forever  assert self._self_reading_future is None如何解决”的有关知识,在实际案例的...
    99+
    2024-04-02
  • 【异步】Java 的 8 种异步实现方式
    异步执行对于开发者来说并不陌生,在实际的开发过程中,很多场景多会使用到异步,相比同步执行,异步可以大大缩短请求链路耗时时间,比如:发送短信、邮件。 异步的八种实现方式: 线程异步 Thread/Run...
    99+
    2023-09-08
    java spring 开发语言
  • .NET异步编程模式的三种类型介绍
    一、引言 .NET中很多的类、接口在设计的时候都考虑了多线程问题,简化了多线程程序的开发,不用自己去写WaitHandler等这些底层的代码,由于历史的发展,这些类的接口设计有着三种...
    99+
    2024-04-02
  • C#实现基于任务的异步编程模式
    目录一.延续任务二.同步上下文三.使用多个异步方法1.按顺序调用异步方法2.使用组合器四.转换异步模式五.错误处理1.异步方法的异常处理2.多个异步方法的异常处理3.使用Aggreg...
    99+
    2024-04-02
  • .NET4.0版本中基于任务的异步模式(TAP)
    一、引言 当使用APM的时候,首先我们要先定义用来包装回调方法的委托,这样难免有点繁琐, 然而使用EAP的时候,我们又需要实现Completed事件和Progress事件,上面两种实...
    99+
    2024-04-02
  • Java设计模式之代理模式与@Async异步注解失效的解决
    目录JDK动态代理实现自定义异步注解(@Async)SpringAOP实现自定义异步注解Spring的异步注解@Async失效分析自定义注解实现方式 JDK动态代理实现自定义异步注解...
    99+
    2024-04-02
  • Python的Tornado框架实现异步非阻塞访问数据库的示例
    tornado即是一个http非阻塞服务器, 就要用起来, 我们将用到tornado框架 ,mongodb数据库 以及motor(mongodb的异步驱动).来简单实现tornado的非阻塞功能. 其他环境...
    99+
    2022-06-04
    示例 框架 数据库
  • python模块之 aiomysql 异步mysql
    mysql安装教程 mysql语法大全 python 模块pymysql模块,连接mysql数据库 一、介绍 aiomysql 是一个基于 asyncio 的异步 MySQL 客户端库,用于在 Pyt...
    99+
    2023-09-26
    python mysql
  • C++ 函数异常与设计模式:模式化异常处理
    在 c++++ 中,异常处理设计模式是创建可重用且可靠代码的有效方法,其中包括异常处理模式。本文探讨了以下常用模式:异常安全:确保异常不会破坏函数内部状态。访问器保护:确保访问成员变量时...
    99+
    2024-05-03
    c++ 异常
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作