文章分类 - python socket进程线程篇
摘要:1、什么进程池、线程池 池指的一个容器,该容器用来存放进程或线程,存放的数目是一定的 2、为什么要用池 用池是为了将并发的进程或线程数目控制在计算机可承受的范围内 为何要用进程进池? 当任务是计算密集型的情况下应该用进程来利用多核优势 为何要用线程进池? 当任务是IO密集型的情况下应该用线程减少开销
阅读全文
摘要:案例: import queue # 队列:先进先出 # q=queue.Queue(3) # q.put(1) # q.put(2) # q.put(3) # print(q.get()) # print(q.get()) # print(q.get()) # 堆栈:先进后出 # q=queue.
阅读全文
摘要:1 GIL是什么 GIL是全局解释器锁,本质就是一把互斥锁 GIL是Cpython解释器的特性,而不是python的特性 每启动一个进程,该进程就会有一个GIL锁,用来控制该进程内的多个线程同一时间只有一个执行 这意味着Cpython解释器的多线程没有并行的效果,但是有并发的效果 2、为什么要有GI
阅读全文
摘要:1、什么是生产者消费者模型 生产者消费者模型指的是一种解决问题的思路 该模型中包含两类明确的角色: 1、生产者:创造数据的任务 2、消费者:处理数据的任务 2、为什么要用生产者消费者模型? 1、实现生产者与消费者任务的解耦和 2、平衡了生产者的生产力与消费者消费力 一旦程序中出现明显的两类需要并发执
阅读全文
摘要:IPC:进程间通信,有两种解决方案:队列、管道 管道: ps aux | grep python # 进程队列 from multiprocessing import Queue q=Queue(maxsize=3) q.put({'x':1}) q.put(2) q.put('third') #
阅读全文
摘要:一,创建db.json存json文件 {"count": 1} #互斥锁的原理是将进程/线程内执行的部分代码由并发执行变成穿行执行,牺牲了效率但保证数据安全 #互斥锁不能连续低执行mutex.acquire()操作,必须等到拿着锁的进程释放锁mutex.release()其他进程才能抢到 实例: f
阅读全文
摘要:主线程要等到该进程内所有非守护线程(子线程)都死掉才算死掉,因为主线程的生命周期 代表了该进程的生命周期,该进程一定是要等到所有非守护的线程都干完活才应该死掉 可以简单理解为: 守护线程是要等待该进程内所有非守护的线程都运行完毕才死掉 实例一: 实例一: from threading import
阅读全文
摘要:什么是守护进程: 守护: 在主进程代码结束情况下,就立即死掉 守护进程本质就是一个子进程,该子进程守护着主进程 为何要用守护进程 守护进程本质就是一个子进程,所以在主进程需要将任务并发执行的时候需要开启子进程 当该子进程执行的任务生命周期伴随主进程整个生命周期的时候,就需要将该子进程做成守护的进程
阅读全文

浙公网安备 33010602011771号