python多任务基础

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