返回顶部
首页 > 资讯 > 后端开发 > Python >多任务-----协程gevent的使用
  • 152
分享到

多任务-----协程gevent的使用

协程gevent 2023-01-31 08:01:51 152人浏览 泡泡鱼

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

摘要

协程 一,迭代器iterable 能实现一定的数据,但是又不会占用很大的空间,协程切换任务资源小,效率高。如何判断某一类型是否可以迭代 from collections import Iterable


 print(isinstan

协程

一,迭代器iterable 能实现一定的数据,但是又不会占用很大的空间,协程切换任务资源小,效率高。
如何判断某一类型是否可以迭代

from collections import Iterable



print(isinstance([11,2,3], Iterable))

python2是如下实现的,python3中将range改成了xrange
range(2000)生成2000个值的结果,会占用很大的内存空间
xrange(2000)是指生成2000个值的方式,占用很小的空间。

如果一个对象是迭代器,那么一定可以迭代,如果一个对象可以迭代,但不一定是迭代器。

迭代器对象必须要有__iter__和__next__方法。

如果数据量很大的情况下,最好使用创建迭代器的方式来节省内存空间。
eg:

class Fibo(object):
    def __init__(self, all_num):
        self.all_num = all_num
        self.current_num = 0
        self.a = 0
        self.b = 1


    def __iter__(self):
        return self


    def __next__(self):
        if self.current_num < self.all_num:
            ret = self.a
            self.a, self.b = self.b, self.a + self.b
            self.current_num += 1

            return ret

        else:
            raise StopIteration

fibo = Fibo(20)

for temp in fibo:
    print(temp)

二, 生成器generator
生成器是一种特殊的迭代器,可以让函数暂停执行。所以可以利用生成器实现多任务。
生成迭代器有两种方式:

  1. (x*2 for x in range(10)) 返回值就是生成器。
  2. 含有yield的函数,此时他不再是一个函数,而是一个生成器对象
  3. 启动生成器有两种方式,next和send,next优先
  4. eg:
def fibo(max_num):
    a, b = 0, 1
    current_num = 0
    while current_num < max_num:
        yield a
        a, b = b, a + b
        current_num += 1

fi = fibo(20)
while True:
    try:
        ret = next(fi)
        print(ret)
    except:
        break

三,协程greenlet、gevent完成多任务
gevent是协程最常用的一种方式。当线程在等待执行浪费的时间,可以用协程来解决。协程会在等待时间去执行别的方法。
eg:协程的实际使用

def download_pic(img_name, img_url):
    request = urllib.request.urlopen(img_url)
    img_content = request.read()

    with open(img_name, 'wb') as f:
        f.write(img_content)


def main():
    gevent.joinall([
        gevent.spawn(download_pic, '1.jpg', 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1556006133066&di=6c4ea03a666b333328d59163b8137de9&imgtype=0&src=Http%3A%2F%2Fattach.bbs.miui.com%2Fforum%2F201408%2F27%2F103420lzrq3jcimigfjmuw.jpg'),
        gevent.spawn(download_pic, '2.jpg', 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1556006133066&di=1f17489eb4f7fd3ce4f16c2365fab82a&imgtype=0&src=http%3A%2F%2Fb-ssl.duitang.com%2Fuploads%2Fblog%2F201511%2F08%2F20151108150337_tu32m.jpeg')
    ])


if __name__ == '__main__':
    main()

--结束END--

本文标题: 多任务-----协程gevent的使用

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

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

猜你喜欢
  • 多任务-----协程gevent的使用
    协程 一,迭代器iterable 能实现一定的数据,但是又不会占用很大的空间,协程切换任务资源小,效率高。如何判断某一类型是否可以迭代 from collections import Iterable


 print(isinstan...
    99+
    2023-01-31
    协程 gevent
  • Python使用gevent实现协程
      Python中多任务的实现可以使用进程和线程,也可以使用协程。  一、协程介绍  协程,又称微线程。英文名Coroutine。协程是Python语言中所特有的,在其他语言中没有。  协程是python中另外一种实现多任务的方式,比线程更...
    99+
    2023-01-31
    Python gevent
  • Python中gevent模块协程使用
    目录背景什么是协程?什么是 gevent?协程的例子Q&AQ:gevent 无法捕获的耗时A:猴子补丁实践异步 requests 请求gevent 的锁Tip背景 因为 Python 线程的性能问题,在 P...
    99+
    2022-06-02
    Python gevent协程 Python gevent
  • 多任务—协程
    一、协程简介 协程 协程,又称微线程,纤程。英文名Coroutine。   协程是python个中另外一种实现多任务的方式,只不过比线程更小占用更小执行单元(理解为需要的资源)。 为啥说它是一个执行单元,因为它自带CPU上下文。这样只要在...
    99+
    2023-01-31
    协程
  • 怎么在Python中使用gevent实现协程
    怎么在Python中使用gevent实现协程?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和面向对象...
    99+
    2023-06-14
  • Python中gevent模块协程怎么用
    这篇文章主要介绍Python中gevent模块协程怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!背景因为 Python 线程的性能问题,在 Python 中使用多线程运行代码经常不能达到预期的效果。而实际开发中...
    99+
    2023-06-20
  • 多任务中进程、线程、协程
    为什么使用多任务有什么好处? 答:提高程序执行效率,实现同一时刻可以做二个以上的事情。 啦啦啦。。。重点来了 并行:任务数大于CPU核数,每个CPU就要执行多个任务,那肯定忙不过来,多个任务执行就需要排队等待上一任务执行完,才能执行下一任...
    99+
    2023-01-30
    线程 进程 协程
  • Python中的协程(Coroutine)操作模块(greenlet、gevent)
    目录一、协程介绍1、介绍2、举例3、优点如下:4、缺点如下:5、总结协程特点:二、greenlet(绿叶)模块1、安装模块2、greenlet实现状态切换3、效率对比三、gevent...
    99+
    2024-04-02
  • 使用python怎么在协程中增加任务
    使用python怎么在协程中增加任务?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。python主要应用领域有哪些1、云计算,典型应用OpenStack。2、WEB前端开发,众多...
    99+
    2023-06-14
  • Linux下协程与异步任务的协调
    在Linux下,协程与异步任务之间的协调可以通过多种方式实现。以下是一些常见的方法: 使用事件循环:可以使用事件循环来管理协程和异步任务之间的调度。可以使用类似于libuv的库来实现事件循环,然后将协程和异步任务注册到事件循环中,根据事...
    99+
    2024-08-06
    linux
  • 使用python怎么实现在协程中增加任务
    这篇文章主要介绍了使用python怎么实现在协程中增加任务,此处通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考价值,需要的朋友可以参考下:python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和面向...
    99+
    2023-06-06
  • 大规模任务处理:使用Golang WaitGroup和协程池
    在使用Golang进行大规模任务处理时,我们可以结合使用WaitGroup和协程池来提高并发执行的效率。首先,我们需要导入相应的包:...
    99+
    2023-10-08
    Golang
  • python 多进程和协程配合使用
    有一批key已经写入到3个txt文件中,每一个txt文件有30万行记录。现在需要读取这些txt文件,判断key是否在数据仓库中。(redis或者mysql)为空的记录,需要写入到日志文件中! 任务分工1. 使用多进程技术,每一个进...
    99+
    2023-01-31
    进程 和协 python
  • 异步协程开发实战:基于PHP的多线程任务调度器
    异步协程开发实战:基于PHP的多线程任务调度器前言:随着互联网技术的不断发展,更多的网站和应用程序开始面临并发访问的需求。传统的同步编程方式已经无法满足这种需求,因为同步编程需要等待某个任务完成后才能执行下一个任务,导致程序的运行效率低下。...
    99+
    2023-12-09
    多线程 异步 协程
  • SpringBoot中定时任务@Scheduled的多线程使用详解
    目录一、@Scheduled注解简介二、@Scheduled的多线程机制三、@Scheduled的多线程问题四、@Scheduled加入线程池来处理定时任务五、@Scheduled详...
    99+
    2023-05-17
    SpringBoot定时任务@Scheduled原理 SpringBoot定时任务@Scheduled使用 SpringBoot定时任务@Scheduled
  • Python的网络编程库Gevent的安装及使用技巧
    安装(以CentOS为例) gevent依赖libevent和greenlet: 1.安装libevent 直接yum install libevent 然后配置python的安装 2.安装easy_ins...
    99+
    2022-06-04
    使用技巧 网络编程 Python
  • Node.js使用多进程提高任务执行效率
    最近我有个学员写了个 Node.js 脚本程序,定时从某个服务器下载文件,并向另一个云服务商上传文件。 但是每次只能先下载一个文件,再去上传一个文件。效率比较低。于是他向我请教,怎么...
    99+
    2024-04-02
  • Linux协程与任务调度的优化策略
    在Linux系统中,协程是由用户态库实现的一种轻量级线程,它可以在一个线程中实现多个协程的切换和调度,从而提高程序的并发性能和响应速度。在实现Linux协程的过程中,可以采用以下优化策略来提高任务调度的效率: 采用非抢占式调度:非抢占式...
    99+
    2024-08-06
    linux
  • 详解Python的多任务进程
    目录1.基本概念2.线程和进程比较3.协程和线程的比较总结1.基本概念 定义含义并发:concurrency,同一时刻只能有一条指令执行,但是多个线程的对应的指令被快速轮换地执行并行...
    99+
    2024-04-02
  • C#多线程之任务的用法详解
    目录一.启动任务1.使用线程池的任务2.同步任务3.使用单独线程的任务二.任务的结果————Future三.连续的任务四.任务的层次结...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作