Python多任务总结

  1. 多任务
    什么是多任务
    同时做多件事件(做个多个任务),运行多个方法
    多任务的原理
    并发:假的多任务,时间片的轮转,快速的交替运行任务
    并行:真的多任务,一个核处理一个任务
    实现多任务的三种方式
    线程
    进程
    协程
  2. 线程
    概念:程序执行的最小单位,依赖于进程
    特点
    程序运行起来,就给它创建了一个主线程,等待子线程结束后再结束
    共享全局变量,通过args参数给线程传递数据
    从系统开销讲,进程>线程>协程
    互斥锁
    主要解决了资源竞争的问题
    使用互斥锁
    创建锁对象mutex=threading.Lock()
    获取锁 mutex.acquire
    释放锁 mutex.release
    死锁
    原因:两个线程都在等待对方释放锁
    解决方案:
    写代码设计的时候避免
    设置超时时间
    银行家算法
  3. 进程
    概念:它是代码和资源的集合,分配资源的最小单位,可以在任务列表中查看进程
    特点
    程序运行起来,就会给其创建一个主进程,等待子进程结束后,再结束
    进程调用start()方法后就进入了运行态
    写时拷贝处理数据,通过args给进程传递数据
    从系统开销讲,进程>线程>协程
    进程间通信
    作用:多个进程之间传递数据
    写法
    创建队列对象q=multiprocessing.Queue()
    一个进程给队列中放消息q.put()
    另一个进程从队列中去消息q.get()
    进程池
    为什么要用进程池?
    减少了创建、销毁进程的次数,从而提交效率
    原理
    一次性在进程池中创建多条进程,循环着去使用
    写法
    创建进程池po=multiprocessing.Pool()
    加入任务 po.aplay_async()
    关闭po.close
    应用场景
    任务比较多的时候
    不知道有多少个任务的时候
  4. 协程
    什么是可迭代对象
    一个普通的对象实现了iter内置函数
    什么是迭代器
    一个普通的对象实现了iternext内置函数
    迭代器的特点
    保存的是生成数据的方式,而不直接存储数据
    好处:节省系统空间
    什么是生成器
    它是一个特殊的迭代器
    yield
    一个普通的函数里面写了yield的话,他就是一个生成器模板
    执行函数遇到yield会阻塞
    调用next()或者send()会解阻塞
    利用yield做协程
    写多个函数,每个函数中都写yield,函数执行时遇到yield就会阻塞
    然后交替着题调用不同任务的next()方法,这样就用协程实现了多任务
    原理:
    利用线程的空闲时间去执行其他的任务
    特点:
    协程依赖于线程,线程依赖进程
    从系统开销讲,进程>线程>协程
    实现协程的三种方式
    yield next() send()
    greenlet
    gevent
    gevent.spawn(函数名).join()
    gevent.joinall([gevent.spawn(函数名)])

你可能感兴趣的:(Python多任务总结)