随笔分类 -  进程-线程-协程

摘要:一、进程: 进程是资源分配单位 进程切换需要的资源很大,效率很低 二、线程 线程是操作系统调度的单位 线程切换需要的资源一般,效率一般。 三、协程: 协程切换任务资源很小,效率最高。 四、小结: 多进程、多线程根据CPU核数的不同,可能是并行的, 但是协程是在一个线程中,所以它一定是并发的。 阅读全文
posted @ 2021-01-22 13:35 御姐玫瑰 阅读(98) 评论(0) 推荐(0)
摘要:一、需求分析 1、补充说明:使用协程实现多任务只需要使用gevent实现的方式即可,之前两种(yield和greenlet)仅仅只是原理。 2、要求:使用协程实现图片下载器功能 3、分析: a、在Python中使用网络功能 b、使用协程实现图片下载器功能: 基本语法: import urllib.r 阅读全文
posted @ 2021-01-22 13:28 御姐玫瑰 阅读(103) 评论(0) 推荐(0)
摘要:一、gevent的使用说明 1、gevent的介绍: a、它是异步并发库,它实现并发的原理就是采用了协程的概念来实现。 b、使用gevent模块中的spwan类创建出一个greenlet对象, 再通过这个对象来实现多任务。 c、gevent是对greenlet的进一步封装。 2、安装: sudo p 阅读全文
posted @ 2021-01-22 13:20 御姐玫瑰 阅读(379) 评论(0) 推荐(0)
摘要:一、greenlet使用说明: 1、使用greelent可以替换yield的多任务。 2、greelent类对yield完成多任务进行了简单的封装。 即:在任务中不需要添加yield关键字了。 3、安装:pip install greenlet 二、代码演示 from greelet import 阅读全文
posted @ 2021-01-22 13:06 御姐玫瑰 阅读(104) 评论(0) 推荐(0)
摘要:一、yield完成多任务的特点: 1、相对进程、线程而言,它占用的资源最小 2、线程是并发,假的多线程。因为它是一个进程中的一个线程 二、执行流程 1、先按顺序执行task_1函数,当执行到【yield】关键字处时,暂停执行 2、task_1函数暂停执行后,程序立马切换至task_2函数继续执行, 阅读全文
posted @ 2021-01-22 13:03 御姐玫瑰 阅读(136) 评论(0) 推荐(0)
摘要:一、迭代器 1、定义:即:一个对象中既包含了【__iter__】方法,又包含了【__next__】方法 2、核心:它保存了一段生成数据的代码。 二、生成器 1、定义:这个对象中既没有【__iter__】方法,也没有【__next__】方法, 它是一个特殊的迭代器,对象中必须要有【yield】关键字, 阅读全文
posted @ 2021-01-22 12:58 御姐玫瑰 阅读(113) 评论(0) 推荐(0)
摘要:一、生成器说明 1、生成器是一个特殊的迭代器。 因为它既没有【__iter__】方法,也没有【__next__】方法。 2、示例1:使用while循环去遍历自定义的生成器对象 def create_num(all_nums): a, b = 0, 1 current_num = 0 while cu 阅读全文
posted @ 2021-01-22 12:54 御姐玫瑰 阅读(322) 评论(0) 推荐(0)
摘要:一、生成器说明 二、创建生成器的方法: 1、将之前所学的列表推导式的中括号改为小括号: a、列表推导式(占用空间) 示例1: nums = [x*2 for x in range(5)] print(nums) for num in nums: print(num) View Code 运行结果: 阅读全文
posted @ 2021-01-21 18:14 御姐玫瑰 阅读(102) 评论(0) 推荐(0)
摘要:一、说明 1、除了for循环可以接收可迭代对象外,list函数、tuple函数也可以接收可迭代对象。 二、原理 1、示例: t = (1, 2, 3) my_list = list(t) print(my_list) View Code 运行结果: 2、转换步骤: a、重新生成了一个空列表 b、调用 阅读全文
posted @ 2021-01-21 17:54 御姐玫瑰 阅读(70) 评论(0) 推荐(0)
摘要:一、使用迭代器的目的 1、说明 :当在一个程序中需要用到很多个值时, 方案一:使用一个列表将这些值进行存储。什么时候用就什么时候取。 缺点:占用大量的内存空间 方案二:存储生成这些值的方式、什么时候使用就什么时候生成一个。 缺点:占用极小的内存空间,只占用产生这些值的方式的内存空间 比喻: 为了长期 阅读全文
posted @ 2021-01-21 17:51 御姐玫瑰 阅读(174) 评论(0) 推荐(0)
摘要:一、使用两个对象创建一个可被for循环遍历的迭代器 1、要求:使用两个对象自定义一个可以被for循环遍历的迭代器 2、注意事项: a、Demo类中的【__iter__】方法中返回的迭代器引用, 并将当前类对象当作参数传入到迭代器中。 作用:可将Demo类中的数据引用传入至ClassIterator类 阅读全文
posted @ 2021-01-21 17:42 御姐玫瑰 阅读(119) 评论(0) 推荐(0)
摘要:一、协程 1、协程是Python语言独有的一种多任务方式。 2、使用gevent模块实现协程。 3、协程的实现过程(步骤) 迭代器 生成器 yield greenlet gevent 二、迭代器 1、迭代的定义: 在原有的基础之上添加新的功能。 2、迭代对象的定义:即一个对象中有包含了【__iter 阅读全文
posted @ 2021-01-21 17:29 御姐玫瑰 阅读(119) 评论(0) 推荐(0)
摘要:一、关系对比 1、线程是依附在进程中的,没有进程就没有线程。 2、一个进程默认提供一条线程,进程可以创建多个线程。 二、区别对比 1、进程: 不共享全局变量 创建进程的资源开销大 进程是系统资源分配的基本单位 多进程 开发比 单进程的多线程 开发稳定性强。 适用于计算密集型的相关操作 2、线程 共享 阅读全文
posted @ 2021-01-20 21:07 御姐玫瑰 阅读(598) 评论(0) 推荐(0)
摘要:一、什么是死锁 1、一直等待对方释放锁的情况就是死锁。 2、类似于男女之间吵架的情况,双方一直等待对方道歉的情况。 二、死锁的使用 1、要求:多线程同时根据下标在列表中取值,要保证同一时刻只能有一个线程去取值。 2、列锁示例: from threading import * g_num = 0 # 阅读全文
posted @ 2021-01-20 20:59 御姐玫瑰 阅读(104) 评论(0) 推荐(0)
摘要:一、互斥锁介绍及特点 说明:对共享数据进行锁定,保证同一时刻只有一个线程去操作。 特点: 互斥锁是多个线程一起去抢。 谁先抢到锁是由CPU的调度决定的 没有抢到锁的线程需要等待,此时进入阻塞状态。 互斥锁使用完释放后,其它等待的线程会再去抢这个锁。 二、语法 import threading # 创 阅读全文
posted @ 2021-01-20 20:52 御姐玫瑰 阅读(217) 评论(0) 推荐(0)
摘要:一、线程之间共享全局变量 1、什么时候会出现错误? 解答:多个线程同时操作全局变量时,可能会出现错误。 2、造成错误的原因 解答:这是由于CPU调度机制造成的。 3、线程同步 解答: 保证同一时刻只能一个线程去操作全局变量。 同步:协同步调,按预定的先后次序进行运行。(类似于生活中的对讲机。) 4、 阅读全文
posted @ 2021-01-20 20:44 御姐玫瑰 阅读(766) 评论(0) 推荐(0)
摘要:为什么线程之间共享全局变量? 解答:因为多线程是在同一个进程中,所以可以共享全局变量。 示例1:不加join方法的效果: 根据CPU的调度的不同,读取和写入两个任务会分别对全局变量进行操作。导致期望的结果不能满足。 from threading import * from time import * 阅读全文
posted @ 2021-01-20 20:37 御姐玫瑰 阅读(1384) 评论(0) 推荐(0)
摘要:一、线程的特点 主进程会等待所有子进程执行结束后再结束。 1、将子线程设置守护主线程: 子线程对象 = threading.Thread(target=任务, daemon = True) 子线程对象.setDaemon(True) 二、示例 要求:主线程睡一秒后退出程序 代码1:不设置守护主线程则 阅读全文
posted @ 2021-01-20 20:31 御姐玫瑰 阅读(945) 评论(0) 推荐(0)
摘要:一、线程的特点 1、线程之间的执行是无序的 2、主线程会等待所有子线程执行结束再结束 3、线程之间共享全局变量 4、线程之间共享全局变量时,数据可能出现错误的问题。 二、示例 from threading import * from time import * def task(): sleep(1 阅读全文
posted @ 2021-01-20 20:23 御姐玫瑰 阅读(166) 评论(0) 推荐(0)
摘要:from threading import * from time import * def show_info(name,age): print(name,age) def show_user_info(username,password): print(username,password) if 阅读全文
posted @ 2021-01-20 20:19 御姐玫瑰 阅读(57) 评论(0) 推荐(0)

levels of contents