• 线程


    一. 线程与进程的区别
    1. 进程间相互独立,统一进程下的线程共享进程的资源
    2. 进程间通信IPC, 线程间可以直接读写进程的内容来进行通信
    3. 线程切换快
    4. 进程不是可执行的实体,真正执行程序的是线程,进程是线程的容器
    二. 线程的特点
    共享进程资源 可并发执行
    三. threading模块
    1. 线程的创建
    1)from threading import Thread
    t = Thread(target=函数,args=(),kwargs={})
    t.start()
    2)继承Thread类
    class MyThread(Thread):
    def run(self):
    pass
    t = MyThread()
    t.start()
    在父进程下开启的多个线程,每个线程都跟父进程的pid一样
    2. threading的一些方法
    threading.current_thread() # 返回当前线程对象
    threading.enumerate() # 返回一个包含正在运行的线程的列表.
    threading.current_thread().getName() # 得到当前线程的名称
    threading.current_thread().ident # 得到当前线程的线程号
    3. 守护线程(t.deamon = True)
    1)对进程而言,守护进程是指父进程的代码执行完,守护进程随之结束,
    但父进程没有结束,要等待所有进程接收回收后才结束
    2)对线程而言,父线程是等非守护进程全部执行完才结束,
    如果守护线程在这段时间内可以执行完,就执行
    若不能,则随着父线程的代码结束
    4. GIL锁
    GIL是解释器级别的,保护的就是解释器级别的数据,所有线程抢的是GIL锁,或者说所有线程抢的是执行权限
    5. Lock
    r = Lock()
    r.acquire()
    加锁的内容
    r.release()
    死锁:
    是指两个或两个以上的进程或线程在执行过程中,
    因争夺资源而造成的一种互相等待的现象
    递归锁:
    6. Event 事件
    isSet() # 返回时什么状态
    wait() # 当False的时候阻塞住
    set() # 将event的状态设成True
    clear() # 将event的状态设成False
    7. queue 队列
    import queue
    1) 先进先出
    q = queue.Queue()
    q.put()
    q.get()
    2) 先进后出
    q = queue.LifoQueue()
    3) 优先级队列
    q = PriorityQueue()
    q.put(元组) # 元组第一个通常放数字(优先级),越小优先级越高
    若优先级相同,比较后面的ASCII码,小的先出来
    8. 进程池 concurrent.futures 模块
    ThreadPoolExecutor 线程池
    ProcessPoolExecutor 进程池

    submit(func,参数) 异步提交任务
    map(func, *iterables, timeout=None, chunksize=1) 取代for循环submit的操作
    shutdown(wait=True) 相当于进程池的pool.close()+pool.join()操作
    result() 取结果
    add_done_callback() 回调函数
  • 相关阅读:
    shiro密码的比对,密码的MD5加密,MD5盐值加密,多个Relme
    shiro权限配置的细节问题&认证
    shiro集成spring&工作流程&DelegatingFilterProxy
    shiro简单入门介绍
    springmvc小结(下)
    springmvc小结(上)
    springmvc(5)拦截器
    spring mvc(4)处理模型数据
    springmvc(3)注解
    深入理解javascript作用域系列第四篇——块作用域
  • 原文地址:https://www.cnblogs.com/sophie99/p/9879611.html
Copyright © 2020-2023  润新知