协程,又称为线程,
线程是一个python个中另外一中实现多任务返方式,在一个线程中的某个函数可以理解任何地方保存当前函数中的临时变量的信息,然后再到另一个函数中执行
协程和线程差异
在多个处理器的情况下,从概念上多线程同时运行多个线程:而协同程序是同过协作来完成的
在任一指定时刻只有一个协同程序在运行,并且这个正在运行的协同程序只在必要时才会被挂起
简单实现协程
from gevent import monkey#导入补丁模块
monkey.patch_all() #创建补丁
import gevent
import request
from queue import Queue
import time
#明确url
base_url='https://hr.tencent.com/position.php?start=%d'#腾讯
def get_page(q):
while not q.empty()#判断对象不为空时
url = q.get#获取队列中的一个
response=requests.get(url,headers={'User-Agent':'lalala'})#发送请求
print(reponse.url)
print(time.ctime())#当前时间
g_list=[]#列表
q= Queue()#队列创建
#创建任务
for i in range(0,3800+1,10):
fullurl = base_url/%#将内容插入链家
q.put(fullurl)
#多少个基层
for i in range(100);
g = genent.spawn(get_page,q)#创建协程
g_list.append(g)#将协程对象添加到列表中
# for i in g_list:#遍历状态
# i.join()#等待当前协程执行完毕,在继续执行
gevent.joinall(g_list)#等待所有协程执行完毕
print(time.ctime())#结束时间
greenlet
为了更好使用协程来完成多任务,python中的greenlet模块对其封装,从而使得切换任务变的更加简单
greenlet是一个python的协程管理、切换模块。通过greenlet,你可以显式地在不同的任务之间切换。
gevent.spawn启动的所有协程,都是运行在同一个线程之中,所以协程不能跨线程同步数据。
gevent.queue.Queue 是协程安全的。
python程序实现的一种单线程下的多任务执行调度器,简单来说在一个线程里,先后执行AB两个任务,但是当A遇到耗时操作(网络等待、文件读写等),这个时候gevent会让A继续执行,但是同时也会开始执行B任务,如果B在遇到耗时操作同时A又执行完了耗时操作,gevent又继续执行A。
imort gevent
def test(time)
print(1)
gevent.sleep(time)
print(2)
def test(time):
print(3)
gevent.sleep(time)
print(4)
if __name == 'main'
gevent.joinall9[
gevent.spawn(test,2),
gevent.spawn(test,3)
])
其中gevent.sleep()是gevent自带的延时,当gevent遇到这个延时时会自动切换,这里用gevent.sleep()代替一些耗时操作
2(进程)
进程是系统分配和调度资源的基本单位,线程是cpu调度和分派的基本单位
线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护;而进程正相反。
在一个进程内的所有线程共享全局变量,很方便在多个线程间共享数据
:一个执行中程序的实例。系统中的每个程序都运行在某个进程的上下文中
进程是系统资源分配的最小单位
3.线程
在一个进程内的所有线程共享全局变量,很方便在多个线程间共享数据。
并行:指的是任务数小于等于cpu核数,即任务真的是一起执行的
线程是操作系统能够进行运算调度的最小单位。
并发
1.并发设计 2.并发执行
使多个操作可以在重叠的时间段内进行
这里的重点在于重叠的时间内
在时间1s秒内, 具有IO操作的task1和task2都完成,这就可以说是并发执行。所以呢,单线程也是可以做到并发运行的。
取决于设计,也取决于部署方式
协程 线程 进程
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 一、进程 操作系统中最核心的概念是进程,分布式系统中最重要的问题是进程间通信。进程是“程序执行的一个实例” ,担当...