1. 1.多任务:两个程序段同时运行
    2.为某个函数创建线程并启动:
    import threading
    线程名 = threading.Thread(target = 函数名,args = 参数元组) #创建线程对象,并不是真正的线程,target
    线程名.start() #执行线程 此时线程真正创建并可以被调度执行
    3.线程结束的标志:创建线程时的target函数执行完毕
    4.程序执行时默认会有一个主线程,负责整个程序主体的执行,主线程在所有子线程结束以后才能结束
    5.为一个类创建线程:
    定义一个类继承自threading.Thread
    在其中实现run方法,该方法中的代码是要放在线程中执行的
    想为其创建线程时,先实例化该类(相当于实例化一个线程对象,并非真正的线程),然后用实例名调用start()方法(此时才是真正创建线程交由os调度)
    6.在函数中对全局变量进行修改时,到是否使用global取决于是否对全局变量的指向进行了修改:
    如果修改了指向,让全局变量指向了别处,那么必须使用global,否则不加gloabal
    7.创建线程时若目标函数有参数,创建线程对象时,除了target参数,还有args参数(函数参数元组)
    8.多线程共享全局变量
    9.实现同步和互斥的方法:
    threading.lock()实例化一个锁
    在需要的代码前后分别添 锁.acpuire()和 锁.release.()
    在两者之间的代码执行具有原子性(即要么执行要么不执行)
    锁的概念可以理解为操作系统中的信号量
  2.  
  3. 10.多线程对共享资源的访问可能会导致死锁,解决方法:
    1.添加超时时间
    2.银行家算法
  4.  
  5. 11.进程和程序的区别:简单理解,一个动态一个静态:进程是运行状态的程序+占用的资源
  6.  
  7. 12.进程的状态 :主要三种 就绪 运行 堵塞
    13.实现多任务方式:线程、进程、协程
    14.进程创建步骤:
  8.  
  9. 实例名 = multipleporcessing.Porcess() 实例化一个Process对象
    实例.start() 创建进程并交由OS调度
  10.  
  11. 15.进程也分为主进程子进程之分
    16.每创建一个进程,就将主程序的资源也复制到子进程,因此创建多个新进程的资源耗费很大,当子进程不改变程序代码时多个子进程可以共享一份代码。
    17.进程和线程的简单对比 进程是资源分配的基本单位,多线程是执行的基本单位。
    功能:前者例如一台电脑上开多个QQ 后者例如一个QQ的多个聊天窗口
  12.  
  13. 18.进程间通信的一种重要方式:队列 queue (可以实现程序的解耦) 实现进程间数据共享
    19.进程池Pool 预先创建一定数目的进程,为多个任务动态动态分配进程来执行 一般用来处理任务数量不确定的情况,任务数量少且确定的情况使用传统方法
    特点:重复利用进程池的进程做任务
    20.进程池使用方法:
    from multiprocessing import Pool
    创建进程池实例 实例名 = Pool(进程池数目)
  14.  
  15. 在需要的时候为要执行的函数分配进程 实例名.apply_async(函数名,参数元组) (分配时不需要考虑进程池的进程被占用完的情况,需要的时候尽管调用语句,系统会自动管理和实现(自动阻塞和自动调用) )
  16.  
  17. 在不需要为创建多任务时关闭进程池 实例名.close()
    主进程等待所有子进程执行完成 实例名.join()
  18.  
  19. 21.进程池使用注意:使用进程池时,主进程未必会等待进程池中的进程执行完毕,所有要想让进程池完成所有任务,必须在进程池进程分配完毕之后调用join()方法
    22.isinstance(对象,类) 判断一个对象是否是一个类的实例。
    23.可迭代对象的简单理解:可以使用for来遍历元素的对象,实现了__iter__()方法
    迭代器的简单理解:可以通过next()方法获取下一个值的对象,实现了__iter__()和__next__()方法
    迭代器一定是一个可迭代对象
    24.自定义可迭代对象:类中实现__iter__方法,该方法返回一个迭代器,该类的实例化对象就是一个可迭代对象
    25.自定义迭代器:在类中实现__next__方法,返回每次迭代的值。迭代器不存储全部数据,只存储得到数据的方法,然后实现__iter__()方法,返回self
    在实现可迭代方式时,可以迭代器和迭代对象分开实现,也可以直接实现迭代器即可
    26. 通过可迭代对象的__iter__()方法得到迭代器,每次循环时调用next(返回的迭代器)得到下一个迭代值
    28. next(可迭代对象)方法的实质;调用传入的对象的__next__()方法
    29.生成器:一种特殊的迭代器,只保留生成数据的算法,不存储所有的数据,可以使用for循环和next方法调用
    29.生成器的两种实现方式:
    1.通过yield返回值的函数,此时该函数就成了一个生成器创建函数,通过变量名 = 函数(参数)的方式生成一个生成器
    2.生成器推导式 (含有i的公式 for i in 可迭代对象)
  20.  
  21. 30.yield语句可以赋给一个变量即 变量名 = yield 变量,通过生成器.send(变量)的方式,可以设置yield语句复制给的变量的内容
    31.生成器作用:让函数返回部分语句的执行结果,并可以继续执行剩余的语句
    32.通过yield可以实现多个任务交替执行
    33.greenlet是对yield的进一步封装,,能够管理多任务的执行
    34.效率:协程高于多线程高于多进程
    35.一般使用gevent实现协程

python多任务基础的更多相关文章

  1. Python文件基础

    ===========Python文件基础========= 写,先写在了IO buffer了,所以要及时保存 关闭.关闭会自动保存. file.close() 读取全部文件内容用read,读取一行用 ...

  2. 3.Python编程语言基础技术框架

    3.Python编程语言基础技术框架 3.1查看数据项数据类型 type(name) 3.2查看数据项数据id id(name) 3.3对象引用 备注Python将所有数据存为内存对象 Python中 ...

  3. Python爬虫基础

    前言 Python非常适合用来开发网页爬虫,理由如下: 1.抓取网页本身的接口 相比与其他静态编程语言,如java,c#,c++,python抓取网页文档的接口更简洁:相比其他动态脚本语言,如perl ...

  4. 小白必看Python视频基础教程

    Python的排名从去年开始就借助人工智能持续上升,现在它已经成为了第一名.Python的火热,也带动了工程师们的就业热.可能你也想通过学习加入这个炙手可热的行业,可以看看Python视频基础教程,小 ...

  5. Python爬虫基础之requests

    一.随时随地爬取一个网页下来 怎么爬取网页?对网站开发了解的都知道,浏览器访问Url向服务器发送请求,服务器响应浏览器请求并返回一堆HTML信息,其中包括html标签,css样式,js脚本等.我们之前 ...

  6. 零基础学Python--------第2章 Python语言基础

    第2章  Python语言基础 2.1 Python语法特点 2.11注释 在Python中,通常包括3种类型的注释,分别是单行注释.多行注释和中文编码声明注释. 1.单行注释 在Python中,使用 ...

  7. Python学习基础笔记(全)

    换博客了,还是csdn好一些. Python学习基础笔记 1.Python学习-linux下Python3的安装 2.Python学习-数据类型.运算符.条件语句 3.Python学习-循环语句 4. ...

  8. Python数据分析基础教程

    Python数据分析基础教程(第2版)(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1_FsReTBCaL_PzKhM0o6l0g 提取码:nkhw 复制这段内容后 ...

  9. Python数据分析基础PDF

    Python数据分析基础(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1ImzS7Sy8TLlTshxcB8RhdA 提取码:6xeu 复制这段内容后打开百度网盘手 ...

随机推荐

  1. jmeter接口上传图片功能

    图片上传需要选择Files Upload 输入下列参数: File Path:方法一,把图片放在bin目录下,直接输入图片名称:方法二,点击下图“Browse”按钮,选择一张需要上传的图片,地址将会自 ...

  2. [转载]virtual topology虚拟拓扑

    原文地址:topology虚拟拓扑">virtual topology虚拟拓扑作者:一丝尘埃 topology虚拟拓扑" title="[转载]virtual to ...

  3. Microsoft Visual C++ 2017 Redistributable

    版本:14.10.25008https://download.microsoft.com/download/4/5/4/454AC59C-DC3F-4AD3-950F-6DCBDF672071/vc_ ...

  4. MSP与PSP

    摘抄自Triton.zhang——eeworld 1. MSP和PSP 的含义是Main_Stack_Pointer 和Process_Stack_Pointer,在逻辑地址上他们都是R13 2. 权 ...

  5. Somatic hypermutation (or SHM) is a cellular mechanism by which the immune system adapts to the new foreign elements that confront it (e.g. microbes), as seen during class switching. Somatic hypermut

    Somatic hypermutation (or SHM) is a cellular mechanism by which the immune system adapts to the new ...

  6. R-CNN论文学习

    Rich feature hierarchies for accurate object detection and semantic segmentation Tech report (v5) pr ...

  7. mybatis的xml中也可以通过传入标记参数然后用 choose写选择语句【我】

    mybatis的xml中也可以通过传入标记参数然后用 choose写选择语句

  8. std::function以及std::bind

    转自:https://blog.csdn.net/shuilan0066/article/details/82788954 示例1 : 普通函数 void gFunc() { cout << ...

  9. jmeter分布式遇到的问题记录

    遇到的问题记录: 问题一: 配置好执行机和调度机后,调度机跑执行机器出现下面的报错 java.io.FileNotFoundException:rmi_keystore.jks(系统找不到指定的文件) ...

  10. CentOS7下搭建zabbix监控(二)——Zabbix被监控端配置

    Zabbix监控端配置请查看:CentOS7下搭建zabbix监控(一)——Zabbix监控端配置 (1).在CentOS7(被监控端)上部署Zabbix Agent 主机名:youxi2 IP地址: ...