python协程

Python并发编程协程(Coroutine)之Gevent

南楼画角 提交于 2020-01-13 03:04:17
转载自https://www.cnblogs.com/zhaof/p/7536569.html event官网文档地址: http://www.gevent.org/contents.html 基本概念 我们通常所说的协程Coroutine其实是corporate routine的缩写,直接翻译为协同的例程,一般我们都简称为协程。 在linux系统中,线程就是轻量级的进程,而我们通常也把协程称为轻量级的线程即微线程。 进程和协程 下面对比一下进程和协程的相同点和不同点: 相同点: 我们都可以把他们看做是一种执行流,执行流可以挂起,并且后面可以在你挂起的地方恢复执行,这实际上都可以看做是continuation,关于这个我们可以通过在linux上运行一个hello程序来理解: shell进程和hello进程: 开始,shell进程在运行,等待命令行的输入 执行hello程序,shell通过系统调用来执行我们的请求,这个时候系统调用会讲控制权传递给操作系统。操作系统保存shell进程的上下文,创建一个hello进程以及其上下文并将控制权给新的hello进程。 hello进程终止后,操作系统恢复shell进程的上下文,并将控制权传回给shell进程 shell进程继续等待下个命令的输入 当我们挂起一个执行流的时,我们要保存的东西: 栈, 其实在你切换前你的局部变量

python enhanced generator - coroutine

删除回忆录丶 提交于 2020-01-12 23:48:37
  本文主要介绍python中Enhanced generator即coroutine相关内容,包括基本语法、使用场景、注意事项,以及与其他语言协程实现的异同。 enhanced generator   在 上文 介绍了yield和generator的使用场景和主意事项,只用到了generator的next方法,事实上generator还有更强大的功能。 PEP 342 为generator增加了一系列方法来使得generator更像一个协程Coroutine。做主要的变化在于早期的yield只能返回值(作为数据的产生者), 而新增加的send方法能在generator恢复的时候消费一个数值,而去caller(generator的调用着)也可以通过throw在generator挂起的主动抛出异常。   首先看看增强版本的yield,语法格式如下:   back_data = yield cur_ret   这段代码的意思是:当执行到这条语句时,返回cur_ret给调用者;并且当generator通过next()或者send(some_data)方法恢复的时候,将some_data赋值给back_data.For example: 1 def gen(data): 2 print 'before yield', data 3 back_data = yield data 4

Python入门方法推荐,哪些基础知识必学?

与世无争的帅哥 提交于 2020-01-12 05:33:05
很多想入门的小伙伴还不知道Python应该怎么学,哪些知识必学,今天我们就来盘点一下。 01、入门方法推荐 总体来讲,找一本靠谱的书,由浅入深,边看边练。 网上的学习教程有很多,多到不知道如何选择。所有教程在基础知识介绍方面都差不多,区别在于讲的是否足够细(例如运行原理)以及是否有足够的练习。 目前推荐大家看书《Python编程 从入门到实践》,作者是美国教师,内容从基础知识开始,循序渐进,层层深入,适合零基础者。课程内容第二部分有三个项目实战:外星人入侵、数据可视化、Web应用程序。 不要看很多本,专注于一本,从头到尾看下去,把里面的例子和习题都动手练习一遍,搞懂为什么。编程从一开始就离不开练习,光看是不可能看会的。 只有你在电脑上一行一行的敲代码,才会发现其中没注意到的细节问题,才能有更深刻的理解。缩进、大小写、括号、引号、代码执行的方式等,都是早期学习的坑,切记,不要直接复制代码,一定要手动去敲代码、运行代码。 这个阶段最重要的就是:学好基础知识。掌握了基础之后,便可以开始做项目练习锻炼编程思维了。 学习过程中有不懂的可以加入我们的学习交流秋秋圈784中间758后面214,与你分享Python企业当下人才需求及怎么从零基础学习Python,和学习什么内容。相关学习视频资料、开发工具都有分享 02、基础阶段知识点 下面我们就来盘点一下Python基础阶段应该掌握的一些基础知识。

Python之线程、进程和协程

生来就可爱ヽ(ⅴ<●) 提交于 2020-01-11 07:58:40
Python线程 Threading用于提供线程相关的操作,线程是应用程序中工作的最小单元。 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 import threading 4 import time 5 6 def show(arg): 7 time.sleep(1) 8 print 'thread'+str(arg) 9 10 for i in range(10): 11 t = threading.Thread(target=show, args=(i,)) 12 t.start() 13 14 print 'main thread stop' 上述代码创建了10个“前台”线程,然后控制器就交给了CPU,CPU根据指定算法进行调度,分片执行指令。 更多方法: start 线程准备就绪,等待CPU调度 setName 为线程设置名称 getName 获取线程名称 setDaemon 设置为后台线程或前台线程(默认) 如果是后台线程,主线程执行过程中,后台线程也在进行,主线程执行完毕后,后台线程不论成功与否,均停止 如果是前台线程,主线程执行过程中,前台线程也在进行,主线程执行完毕后,等待前台线程也执行完成后,程序停止 join 逐个执行每个线程,执行完毕后继续往下执行,该方法使得多线程变得无意义 run

python----线程进程协程

余生颓废 提交于 2020-01-09 08:35:00
python线程: import threading import time def show(arg): time.sleep(1) print('thread' + str(arg)) for i in range(10): t = threading.Thread(target=show, args=(i,)) t.start() print('main thread stop') import threading class MyThread(threading.Thread): def __init__(self): threading.Thread.__init__(self) def run(self): print("线程开始运行") t1 = MyThread() t1.start() 通过类创建线程 更多方法: start 线程准备就绪,等待CPU调度 setName 为线程设置名称 getName 获取线程名称 setDaemon 设置为后台线程或前台线程(默认) t.setDaemon(True) 必须在 t.start() 之前调用 如果是后台线程,主线程执行过程中,后台线程也在进行,主线程执行完毕后,后台线程不论成功与否,均停止 如果是前台线程,主线程执行过程中,前台线程也在进行,主线程执行完毕后,等待前台线程也执行完成后,程序停止 join

线程、进程和协程

∥☆過路亽.° 提交于 2020-01-09 04:09:29
Treading用于提供线程相关的操作,线程是应用程序中工作的最小单元 #!/usr/bin/env python # coding:utf-8 import threading import time def show(arg): time.sleep(1) print 'thread'+str(arg) for i in range(10): t = threading.Thread(target=show,args=(i,)) t.start() print 'main thread stop' ''' 打印结果: main thread stop thread0 thread5thread4thread1thread2 thread3 thread7thread6thread8 thread9 ''' 上述代码创建了10个进程,然后控制器就交给CPU,CPU根据指定的算法进行调度,分片执行指令。出现顺序错乱的现象正常,因为他们都在同时抢占屏幕。 更多方法: start 线程准备就绪,等待CPU调度 setName 为线程设置名称 getName 获取线程名称 setDaemon 设置为后台线程或前台线程(默认) 如果是后台线程,主线程执行过程中,后台线程也在进行,主线程执行完毕后,后台线程不论成功与否,均停止 如果是前台线程,主线程执行过程中,前台线程也在进行

python多线程

て烟熏妆下的殇ゞ 提交于 2020-01-08 19:59:08
线程基本使用 #子线程会等待所有的子线程结束后才结束 import threading import time def sing ( ) : for i in range ( 5 ) : print ( "唱歌" ) time . sleep ( 0.5 ) def dance ( ) : for i in range ( 5 ) : print ( "跳舞" ) time . sleep ( 0.5 ) if __name__ == '__main__' : t1 = threading . Thread ( target = sing ) # 注意函数名是没有小括号的 t1 . start ( ) t2 = threading . Thread ( target = dance ) # 注意函数名是没有小括号的 t2 . start ( ) print ( "主线程结束了!" ) 活跃进程数 threadList = threading . enumerate ( ) #查看活跃线程数量 print ( len ( threadList ) ) 线程名称 print ( threading . current_thread ( ) ) 线程传参 元组传递 字典传递 t1 = threading . Thread ( target = sing , args = ( 10 ,

Python爬虫 | 多线程、多进程、协程

时光怂恿深爱的人放手 提交于 2020-01-08 04:29:05
对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进程,打开一个Word就启动了一个Word进程。 有些进程还不止同时干一件事,比如Word,它可以同时进行打字、拼写检查、打印等事情。在一个进程内部,要同时干多件事,就需要同时运行多个“子任务”,我们把进程内的这些“子任务”称为线程(Thread)。 进程、线程、协程的区别 多进程模式最大的优点就是稳定性高,因为一个子进程崩溃了,不会影响主进程和其他子进程。(当然主进程挂了所有进程就全挂了,但是Master进程只负责分配任务,挂掉的概率低)著名的Apache最早就是采用多进程模式。 多进程模式的缺点是创建进程的代价大,在Unix/Linux系统下,用fork调用还行,在Windows下创建进程开销巨大。另外,操作系统能同时运行的进程数也是有限的,在内存和CPU的限制下,如果有几千个进程同时运行,操作系统连调度都会成问题。 多线程模式通常比多进程快一点,但是也快不到哪去,而且,多线程模式致命的缺点就是任何一个线程挂掉都可能直接造成整个进程崩溃,因为所有线程共享进程的内存。 协程的优势: 最大的优势就是协程极高的执行效率。因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销,和多线程比,线程数量越多

Day9, 进程、线程、协程篇

大兔子大兔子 提交于 2020-01-08 03:49:41
本节内容 操作系统发展史介绍 进程、与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件  queue队列 生产者消费者模型 Queue队列 开发一个线程池 进程 语法 进程间通讯 进程池     操作系统发展史 手工操作(无操作系统) 1946年第一台计算机诞生--20世纪50年代中期,还未出现操作系统,计算机工作采用手工操作方式。 手工操作 程序员将对应于程序和数据的已穿孔的纸带(或卡片)装入输入机,然后启动输入机把程序和数据输入计算机内存,接着通过控制台开关启动程序针对数据运行;计算完毕,打印机输出计算结果;用户取走结果并卸下纸带(或卡片)后,才让下一个用户上机。 手工操作方式两个特点: (1)用户独占全机。不会出现因资源已被其他用户占用而等待的现象,但资源的利用率低。 (2)CPU 等待手工操作。CPU的利用不充分。  20世纪50年代后期,出现人机矛盾:手工操作的慢速度和计算机的高速度之间形成了尖锐矛盾,手工操作方式已严重损害了系统资源的利用率(使资源利用率降为百分之几,甚至更低),不能容忍。唯一的解决办法:只有摆脱人的手工操作,实现作业的自动过渡。这样就出现了成批处理。 批处理系统 批处理系统:加载在计算机上的一个系统软件,在它的控制下,计算机能够自动地

Python入门方法推荐,哪些基础知识必学?

让人想犯罪 __ 提交于 2020-01-07 17:23:30
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 很多想入门的小伙伴还不知道Python应该怎么学,哪些知识必学,今天我们就来盘点一下。 01、入门方法推荐 总体来讲,找一本靠谱的书,由浅入深,边看边练。 网上的学习教程有很多,多到不知道如何选择。所有教程在基础知识介绍方面都差不多,区别在于讲的是否足够细(例如运行原理)以及是否有足够的练习。 目前推荐大家看书《Python编程 从入门到实践》,作者是美国教师,内容从基础知识开始,循序渐进,层层深入,适合零基础者。课程内容第二部分有三个项目实战:外星人入侵、数据可视化、Web应用程序。 不要看很多本,专注于一本,从头到尾看下去,把里面的例子和习题都动手练习一遍,搞懂为什么。编程从一开始就离不开练习,光看是不可能看会的。 只有你在电脑上一行一行的敲代码,才会发现其中没注意到的细节问题,才能有更深刻的理解。缩进、大小写、括号、引号、代码执行的方式等,都是早期学习的坑,切记,不要直接复制代码,一定要手动去敲代码、运行代码。 这个阶段最重要的就是:学好基础知识。掌握了基础之后,便可以开始做项目练习锻炼编程思维了。 核心关键:python实战是检验学习效果的唯一标准,不能懒,如果你缺乏最新python实战教程,去我们的python直播技术扣裙 :八五五-四零八-八九三 02、基础阶段知识点