- 多任务
什么是多任务
同时做多件事件(做个多个任务),运行多个方法
多任务的原理
并发:假的多任务,时间片的轮转,快速的交替运行任务
并行:真的多任务,一个核处理一个任务
实现多任务的三种方式
线程
进程
协程 - 线程
概念:程序执行的最小单位,依赖于进程
特点
程序运行起来,就给它创建了一个主线程,等待子线程结束后再结束
共享全局变量,通过args参数给线程传递数据
从系统开销讲,进程>线程>协程
互斥锁
主要解决了资源竞争的问题
使用互斥锁
创建锁对象mutex=threading.Lock()
获取锁 mutex.acquire
释放锁 mutex.release
死锁
原因:两个线程都在等待对方释放锁
解决方案:
写代码设计的时候避免
设置超时时间
银行家算法 - 进程
概念:它是代码和资源的集合,分配资源的最小单位,可以在任务列表中查看进程
特点
程序运行起来,就会给其创建一个主进程,等待子进程结束后,再结束
进程调用start()方法后就进入了运行态
写时拷贝处理数据,通过args给进程传递数据
从系统开销讲,进程>线程>协程
进程间通信
作用:多个进程之间传递数据
写法
创建队列对象q=multiprocessing.Queue()
一个进程给队列中放消息q.put()
另一个进程从队列中去消息q.get()
进程池
为什么要用进程池?
减少了创建、销毁进程的次数,从而提交效率
原理
一次性在进程池中创建多条进程,循环着去使用
写法
创建进程池po=multiprocessing.Pool()
加入任务 po.aplay_async()
关闭po.close
应用场景
任务比较多的时候
不知道有多少个任务的时候 - 协程
什么是可迭代对象
一个普通的对象实现了iter内置函数
什么是迭代器
一个普通的对象实现了iter和next内置函数
迭代器的特点
保存的是生成数据的方式,而不直接存储数据
好处:节省系统空间
什么是生成器
它是一个特殊的迭代器
yield
一个普通的函数里面写了yield的话,他就是一个生成器模板
执行函数遇到yield会阻塞
调用next()或者send()会解阻塞
利用yield做协程
写多个函数,每个函数中都写yield,函数执行时遇到yield就会阻塞
然后交替着题调用不同任务的next()方法,这样就用协程实现了多任务
原理:
利用线程的空闲时间去执行其他的任务
特点:
协程依赖于线程,线程依赖进程
从系统开销讲,进程>线程>协程
实现协程的三种方式
yield next() send()
greenlet
gevent
gevent.spawn(函数名).join()
gevent.joinall([gevent.spawn(函数名)])
Python多任务总结
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 11.1 LAMP架构介绍11.2 MySQL、MariaDB介绍11.3/11.4/11.5 MySQL安装 L...
- 发现没有,在工作和生活中,经常会遇到一些独来独往不合群的人,感觉他们总爱一个人独来独往,不和别人交流,不和别人玩。...