协程

DAY14

梦想与她 提交于 2019-11-27 05:53:42
DAY14 列表推导式 lt = [0,1,2,3,4] lt = [] for i in range(10): lt.append(i**2) print(lt) 意义不大,不推荐使用 字典生成式 print({i: i**2 for i in range(10)}) {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81} zip()方法 字典生成式一般与zip(拉链函数--》列表里面包了元组)连用 keys = ['name', 'age', 'gender'] values = ['nick', 19, 'male'] res = zip(keys, values) print(F"zip(keys,values): {zip(keys,values)}") info_dict = {k: v for k, v in res} print(f"info_dict: {info_dict}") zip(keys,values): <zip object at 0x11074c088> info_dict: {'name': 'nick', 'age': 19, 'sex': 'male'} 通过解压缩函数生成一个字典 压缩方法,Python解释器的内置方法 生成器 yield关键字

day14学习整理-Python函数进阶

依然范特西╮ 提交于 2019-11-27 05:48:01
目录 20190813 学习整理 函数进阶 三元表达式 列表推导式 字典生成器 生成器 yield yield+return?? 迭代器套迭代器(了解) 协同程序(了解) send(value): close() throw(type, value=None, traceback=None) 自定义range()方法(了解) 总结(掌握) 生成器表达式(掌握) 生成器表达式和列表推导式 20190813 学习整理 函数进阶 三元表达式 条件成立时的返回值if条件else条件不成立时的返回值 x = 10 y = 20 print(f"x if x > y else y:{ x if x > y else y}") x if x > y else y: 20 列表推导式 [expression for item1 in iterable1 if condition1 for item2 in iterable2 if condition2 ... for itemN in iterableN if conditionN ] 类似于 res=[] for item1 in iterable1: if condition1: for item2 in iterable2: if condition2 ... for itemN in iterableN: if conditionN:

生成器

霸气de小男生 提交于 2019-11-27 05:40:28
yield的英文单词意思是生产,在函数中但凡出现yield关键字,再调用函数,就不会继续执行函数体代码,而是会返回一个值。 52生成器-停止.jpg?x-oss-process=style/watermark def func(): print(1) yield print(2) yield g = func() print(g) <generator object func at 0x10ddb6b48> 生成器的本质就是迭代器,同时也并不仅仅是迭代器,不过迭代器之外的用途实在是不多,所以我们可以大声地说:生成器提供了非常方便的自定义迭代器的途径。并且从Python 2.5+开始,[PEP 342:通过增强生成器实现协同程序]的实现为生成器加入了更多的特性,这意味着生成器还可以完成更多的工作。这部分我们会在稍后的部分介绍。 def func(): print('from func 1') yield 'a' print('from func 2') yield 'b' g = func() print(F"g.__iter__ == g: {g.__iter__() == g}") res1 = g.__next__() print(f"res1: {res1}") res2 = next(g) print(f"res2: {res2}") next(g) #

线程queue 事件event 协程

回眸只為那壹抹淺笑 提交于 2019-11-27 04:37:12
队列 import queue q = queue.Queue(3) q.put(1) q.put(2) q.put(3) print(q.get()) print(q.get()) print(q.get()) """ 1 2 3 """ 栈 t = queue.LifoQueue(4) t.put(1) t.put(2) t.put(3) t.put(4) print(t.get()) print(t.get()) print(t.get()) print(t.get()) """ 4 3 2 1 """ 优先级队列 p = queue.PriorityQueue(4) p.put((5,"oifjanior")) p.put((-2,"hshts")) p.put((0,"shtr")) p.put((3,"hstrhs")) print(p.get()) print(p.get()) print(p.get()) print(p.get()) """ (-2,"hshts") (0,"shtr") (3,"hstrhs") (5,"oifjanior") """ 事件event ​ 如果程序中的其他线程需要通过判断某个线程的状态来确定自己下一步的操作 版本一 from threading import current_thread, Thread import time

【Python协程的实现】

吃可爱长大的小学妹 提交于 2019-11-27 02:52:18
原文: http://106.13.73.98/__/7/ 补充 : 数据安全问题 进程: 多个进程操作同一个文件,会出现数据不安全线程: 多个线程操作同一个全局变量,会出现数据不安全 对于共享的数据操作: 如果是 += *= /= -= 操作,都存在数据不安全问题 如果是append,extend,pop,remove操作,就不会出现数据不安全问题协程: 永远不会出现数据不安全问题 因为协程是由程序员控制的,而程序员控制的只能是代码 协程示例代码: # 最简单的协程 a = 0 def fn1(): global a g = fn2() # 拿到生成器 next(g) # 转向fn2函数执行 a += 1 next(g) # 转向fn2函数执行 def fn2(): global a yield a += 1 yield print(fn1()) # Noneprint(a) # 2 1. 协程介绍 协程是单线程下的并发,又称微线程,纤程。英文名Coroutine。一句话说明什么是协程:协程是一种用户态的轻量级线程,即协程是由用户程序自己控制调度的. 1. Python的线程属于内核级别的,即由操作系统控制调度(如单线程遇到io或执行时间过长就会被迫交出cpu执行权限,切换其它线程运行) 2. 单线程内开启协程,一旦遇到io,就会从应用程序级别(而非操作系统)控制切换

Unity3d_协程和Invoke二者的区别

拜拜、爱过 提交于 2019-11-27 00:52:41
延迟调用一般会用到 Time. deltatime 做逻辑处理,还有 Invoke 延迟调用,协程,说一下 Invoke 和协程大致区别。 Invoke和协程 一、Invoke函数。 原文: http://blog.csdn.net/ycguhang/article/details/18808873 1.Invoke是一种委托方法。 void Invoke(string methodName, float time); ,第一个参数是要调用的函数名,后一个参数是延迟的时间。 意思为:在time时间后调用函数名为methodName方法。 2.使用 Invoke() 方法需要注意 3点: (1 ):它应该在 脚本的生命周期里的(Start、Update、OnGUI、FixedUpdate、LateUpdate)中被调用; (2):Invoke(); 不能接受含有 参数的方法; (3):在 Time.ScaleTime = 0; 时, Invoke() 无效,因为它不会被调用到 3.Invoke() 也支持重复调用: void InvokeRepeating(string methodName, float time, float repeatRate); 意思是指: time 秒后调用 调用函数名为methodName方法,并且之后每隔 repeatRate

Unity3d_协程和Invoke

允我心安 提交于 2019-11-27 00:52:31
目前的项目中经常用到计时器,一些延迟执行操作。 开始总是使用最基础的time += Time。deltatime;再用time来判断时间。但是若是一个脚本需要拥有多个计时器,这会使脚本变得很乱。 于是在网上开始查询相关资料。 发现2个两个比较便捷的操作: 1.Invoke 2.协程 一、Invoke函数。 原文: http://blog.csdn.net/ycguhang/article/details/18808873 1.Invoke是一种委托方法。 void Invoke(string methodName, float time); ,第一个参数是要调用的函数名,后一个参数是延迟的时间。 意思为:在time时间后调用函数名为methodName方法。 2.使用 Invoke() 方法需要注意 3点: (1 ):它应该在 脚本的生命周期里的(Start、Update、OnGUI、FixedUpdate、LateUpdate)中被调用; (2):Invoke(); 不能接受含有 参数的方法; (3):在 Time.ScaleTime = 0; 时, Invoke() 无效,因为它不会被调用到 3.Invoke() 也支持重复调用: void InvokeRepeating(string methodName, float time, float repeatRate);

【Python协程的实现】 -- 2019-08-11 18:40:16

半世苍凉 提交于 2019-11-27 00:04:35
原文: http://106.13.73.98/__/7/ 补充 : 数据安全问题 进程: 多个进程操作同一个文件,会出现数据不安全线程: 多个线程操作同一个全局变量,会出现数据不安全 对于共享的数据操作: 如果是 += *= /= -= 操作,都存在数据不安全问题 如果是append,extend,pop,remove操作,就不会出现数据不安全问题协程: 永远不会出现数据不安全问题 因为协程是由程序员控制的,而程序员控制的只能是代码 协程示例代码: # 最简单的协程 a = 0 def fn1(): global a g = fn2() # 拿到生成器 next(g) # 转向fn2函数执行 a += 1 next(g) # 转向fn2函数执行 def fn2(): global a yield a += 1 yield print(fn1()) # Noneprint(a) # 2 1. 协程介绍 协程是单线程下的并发,又称微线程,纤程。英文名Coroutine。一句话说明什么是协程:协程是一种用户态的轻量级线程,即协程是由用户程序自己控制调度的. 1. Python的线程属于内核级别的,即由操作系统控制调度(如单线程遇到io或执行时间过长就会被迫交出cpu执行权限,切换其它线程运行) 2. 单线程内开启协程,一旦遇到io,就会从应用程序级别(而非操作系统)控制切换

【11.4】协程是什么?

筅森魡賤 提交于 2019-11-26 23:29:52
协程--可以暂停的函数(可以向暂停的地方传入值) 协程,又称微线程,纤程。英文名Coroutine。 协程的概念很早就提出来了,但直到最近几年才在某些语言(如Lua)中得到广泛应用。 子程序,或者称为函数,在所有语言中都是层级调用,比如A调用B,B在执行过程中又调用了C,C执行完毕返回,B执行完毕返回,最后是A执行完毕。 所以子程序调用是通过栈实现的,一个线程就是执行一个子程序。 子程序调用总是一个入口,一次返回,调用顺序是明确的。而协程的调用和子程序不同。 协程看上去也是子程序,但执行过程中,在子程序内部可中断,然后转而执行别的子程序,在适当的时候再返回来接着执行。 注意,在一个子程序中中断,去执行其他子程序,不是函数调用,有点类似CPU的中断。比如子程序A、B: 1 def A(): 2 print '1' 3 print '2' 4 print '3' 5 6 def B(): 7 print 'x' 8 print 'y' 9 print 'z' 假设由协程执行,在执行A的过程中,可以随时中断,去执行B,B也可能在执行过程中中断再去执行A,结果可能是: 1 1 2 2 3 x 4 y 5 3 6 z 但是在A中是没有调用B的,所以协程的调用比函数调用理解起来要难一些。 看起来A、B的执行有点像多线程,但协程的特点在于是一个线程执行,那和多线程比,协程有何优势?

协程

流过昼夜 提交于 2019-11-26 10:27:23
回眸在曲末 协程 一、阻塞和非阻塞 1. 程序运行中的状态 New 进程正在被创建 Running 进程的指令正在被执行 Waiting 进程正在等待一些事件的发生(例如 I/O 的完成或者收到某个信号) Ready 进程在等待被操作系统调度 Terminated 进程执行完毕(可能是被强行终止的) 2. 定义 阻塞和非阻塞描述的是进程的一个操作是否会使进程转变为等待的状态。 阻塞:程序调用了包含I/O操作的system call,因为system call涉及到了I/O操作不能立即完成,于是内核会将该程序设置为等待状态,调度其他的进程运行,等到它所请求的IO操作完成了以后,再将其改回就绪状态。 非阻塞:程序没有IO操作(或者调用了非阻塞I/O系统调用,一个非阻塞I/0系统调用不会让进程挂起),或者遇到IO通过某种手段让CPU去执行该进程的其他任务(协程)。 二、 同步异步 1. 定义 站在任务发布的角度 同步: 进程将任务发出去之后,等待,直到这个任务最终结束之后,给进程一个返回值,进程再在发布下一个任务 异步:进程发布一个任务后,立即得到一个返回值,就去发布下一个任务;前面发布的任务运行完毕得到结果后会给进程发送一个信号,让进程去接收结果 2. 异步 + 调用机制(爬虫) 版本一:多进程并发执行爬取数据,串行执行数据处理 from concurrent.futures