运行结果
work1....work2....work1....work2....work1....work2....
6.5 注意当前程序是一个死循环并且还能有耗时操作,就不需要加上join方法了,因为程序需要一直运行不会退出
示例代码
import geventimport timefrom gevent import monkeymonkey.patch_alldef work1(num):for i in range(num):print("work1....")time.sleep(0.2)def work2(num):for i in range(num):print("work2....")time.sleep(0.2)if __name__ == '__main__':g1 = gevent.spawn(work1, 3)g2 = gevent.spawn(work2, 3)while True:print("主线程中执行")time.sleep(0.5)执行结果:
主线程中执行work1....work2....work1....work2....work1....work2....主线程中执行主线程中执行主线程中执行..省略..如果使用的协程过多,如果想启动它们就需要一个一个的去使用join方法去阻塞主线程,这样代码会过于冗余,可以使用gevent.joinall方法启动需要使用的协程
实例代码
import timeimport geventdef work1:for i in range(5):print("work1工作了{}".format(i))gevent.sleep(1)def work2:for i in range(5):print("work2工作了{}".format(i))gevent.sleep(1)if __name__ == '__main__':w1 = gevent.spawn(work1)w2 = gevent.spawn(work2)gevent.joinall([w1, w2])
7、进程、线程、协程对比7.1 进程、线程、协程之间的关系
- 一个进程至少有一个线程,进程里面可以有多个线程
- 一个线程里面可以有多个协程
7.2 进程、线程、线程的对比
- 进程是资源分配的单位
- 线程是操作系统调度的单位
- 进程切换需要的资源最大,效率很低
- 线程切换需要的资源一般,效率一般(当然了在不考虑GIL的情况下)
- 协程切换任务资源很小,效率高
- 多进程、多线程根据cpu核数不一样可能是并行的,但是协程是在一个线程中 所以是并发
小结1. 进程、线程、协程都是可以完成多任务的,可以根据自己实际开发的需要选择使用
2. 由于线程、协程需要的资源很少,所以使用线程和协程的几率最大
3. 开辟协程需要的资源最少
作者:y大壮
来源:
https://juejin.cn/post/6970520987011907615
仅做学术分享,若有侵权,请联系删除
推荐阅读
- Python绘制多维度专题地图
- 视频调整分辨率的python代码,一如既往地实用
- 一文带你搞定TCP滑动窗口
- 太好玩了!6种Python实现「实时」显示进度条
- 简单介绍Python中异常处理用法
- 详解一个Python库,用于构建精美数据可视化web app
- python的反射到底有什么用?
- 人生苦短,必须学会的写Python代码利器
- 慎用!Python 实现微信消息轰炸
- 交换机组网与PON组网哪个好?一文了解清楚
