Python 协程
    我们在上一章将生成器的时候最后写了,在Python2中生成器还扮演了一个重要的角色——实现Python的协程。那什么是协程呢?协程协程是实现并发编程的一种方式。提到并发,肯很多人都会想到多线程/多进程模型,这就是解决并发问题的经典模型之一。在最初的互联网世界中,多线程/多进程就在服务器并发中起到举足轻重的作用。但是随着互联网的发展,慢            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-03 17:57:24
                            
                                56阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            importtime#列表生成式t=[i*2foriinrange(10)]print(t)print(t[8])生成器:只有在调用的时候生成相应的数据,一种算法。#只记住当前位置,只有一个next方法,取下一个值这个值就是当前值!。只能记住当前的!前面的数据不保存,后面的数据没生成。c=(i*2foriinrange(100000000))print(c)#斐波那契deffib(max):n,a            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2018-09-17 21:31:06
                            
                                1310阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            在调用普通函数时,程序会中断调用代码运行,切换到调用函数的第一行代码开始执行,到return结束。并且将控制还给调用者,被调用函数状态结束并清空(局部变量等)。如果再次调用该函数,我们需要一切从头重新来过。生成器(协程)就是一种不同于这种模式的新方式,具有非常强大的功能,可以简化我们的代码逻辑,更可以降低内存消耗,提高代码质量与效率。0x01 问题提出来看下面一个例子。我们需要写一个函数,用来提取            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-07-01 16:58:18
                            
                                56阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            引言在现代Python编程中,生成器(Generator)和协程(Coroutine)是两个强大且常被误解的概念。它们不仅能够高效地处理大数据集,还能实现复杂的并发模式。本文将深入探讨这两种技术的原理、应用场景以及它们之间的区别。一、生成器基础生成器是一种特殊的迭代器,它允许你按需生成值,而不是一次性计算并存储所有值。这种"惰性计算"特性使得生成器在处理大数据集时非常高效。1.1 生成器函数生成器            
                
         
            
            
            
            引言在现代Python编程中,生成器(Generators)和协程(Coroutines)是两个强大且常被误解的概念。它们不仅能够高效地处理大数据流,还能实现复杂的并发模式。本文将深入探讨这两种技术的工作原理、使用场景以及它们之间的区别。一、生成器基础生成器是一种特殊的迭代器,它允许你按需生成值,而不是一次性计算并存储所有值。这在处理大数据集时尤其有用,可以显著减少内存消耗。1.1 生成器函数py            
                
         
            
            
            
            Python编程学习圈 2020-05-14由于GIL的存在,导致Python多线程性能甚至比单线程更糟。GIL:全局解释器锁(英语:Global Interpreter Lock,缩写GIL),是计算机程序设计语言解释器用于同步线程的一种机制,它使得任何时刻仅有一个线程在执行。[1]即便在多核心处理器上,使用 GIL 的解释器也只允许同一时间执行一个线程。于是出现了协程(Coroutine)这么            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2021-04-05 14:11:04
                            
                                237阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            生成器:含有yield的函数。(无需借助类就能实现)功能:函数执行过程中可中断、可重开、可暂停、可续传为什么要用生成器? 解决内存占用问题,看最后一段代码。原理:是基于迭代器来实现(既然生成器是一个迭代器,它可以被用在for 循环中),内部会自动创建__iter__()和__next__()方法。运行规则:遇到yield,程序暂停,并返回值,下次还从该位置运行对比return则是程序停止,并返回值            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-01-08 15:08:38
                            
                                59阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            执行结果: 终止协程和异常处理: close: 上述代码中,注释了其他yield ,再次执行就不会有异常了 或者捕获异常,并抛出StopIteration异常(表示已经运行到结尾了),这样也不会有报错 总结close: throw: 向生成器抛一个异常: 改进一下(生成器自己捕获异常): 总结: t            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2022-05-13 13:46:50
                            
                                95阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            1.生成器(generator) 通过列表生成式(列表推导式),我们可以直接创建一个列表 但是,受到内存限制,列表容量肯定是有限的,而且创建一个100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间就白白浪费了。 所以,如果列表元素可以按照某种算            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2020-02-22 21:32:00
                            
                                193阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
            一,迭代器1. 可迭代对象我们已经知道可以对list、tuple、str等类型的            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                            精选
                                                        
                            2023-03-17 11:20:44
                            
                                286阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            
可迭代对象
创建对象的类中有__iter__方法。
它就是可迭代对象。
所谓的可迭代对象,就是可以被遍历的对象。
如果希望遍历能够获取到值,需要让这个__iter__方法返回一个迭代器对象
 
迭代器
创建该对象的类中存在__iter__方法,且存在__next__方法
则该类的实例对象为迭代器对象。
迭代器可以通过next(迭代器)获取返回值,也可通过 迭代器.__next__() 获取返回值            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2021-08-14 09:27:58
                            
                                220阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            协程函数应用 列表生成式 生成器表达式 一、知识点整理: 1、可迭代的:对象下有_iter_方法的都是可迭代的对象 迭代器:对象._iter_()得到的结果就是迭代器 迭代器的特性: 迭代器._next_() 取下一个值 优点: 1.提供了一种统一的迭代对象的方式,不依赖于索引 2.惰性计算 缺点:            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2021-07-26 16:43:23
                            
                                124阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            协程函数应用 列表生成式 生成器表达式 一、知识点整理: 1、可迭代的:对象下有_iter_方法的都是可迭代的对象 迭代器:对象._iter_()得到的结果就是迭代器 迭代器的特性: 迭代器._next_() 取下一个值 优点: 1.提供了一种统一的迭代对象的方式,不依赖于索引 2.惰性计算 缺点:            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2021-05-27 14:10:03
                            
                                839阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            图片PEP原文:https://www.python.org/dev/peps/pep-0342/PEP标题:CoroutinesviaEnhancedGeneratorsPEP作者:GuidovanRossum,PhillipJ.Eby创建日期:2005-05-10合入版本:2.5译者:豌豆花下猫(Python猫公众号作者)目录简介动机规格摘要规格:将值发送到生成器新的生成器方法:send(va            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2021-01-20 16:26:11
                            
                                159阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            1. 代码import timedef task_1():    while True:        print("------------1-------------")        time.sleep(0.1)        yielddef task_2():    while True:        print("------------2-------------")                  
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2022-07-08 12:41:32
                            
                                74阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            目录简介动机规格摘要规格:将值发送到生成器新的生成器方法:send(value)新的语法:yield 表达式规格:异常和清理新语法:yield 允许在try-finally中新的生成器方法:throw(type,value = None,traceback = None)新的标准异常:GeneratorExit新的生成器方法:close()新的生成器方法:__del__()可选的扩展扩展的 con            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2021-04-13 12:38:51
                            
                                61阅读
                            
                                                                             
                 
                
                             
         
            
            
            
             Enhanced Generators PEP作者: Guido van Rossum, Phillip J. Eby 创建日期: 2005-05-10 合
                    
                
                    
                        
                                                            
                                                                        
                                                                                        翻译
                                                                                    
                            2022-12-15 21:18:55
                            
                                47阅读
                            
                                                                             
                 
                
                             
         
            
            
            
             #!/usr/bin/python3
def MyGenerator():
        value=yield 1
        yield value
        return done
gen=MyGenerator()
print(next(gen))
print(gen.send("I am Value"))  生成器内有一个方法send,可再            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-06-20 15:00:14
                            
                                319阅读