正在显示: 1 - 10 的75 搜索结果
Python GIL 锁

Python GIL 锁

Python GIL锁 – Python 中除了 线程互斥锁Lock 还有 GIL 锁,GIL 锁全称:Global Interpreter Lock,任何 Python 线程threading 执行前,必须先获得 GIL 锁才能执行,当线程获取到 GIL 锁之后,每执行 100 条字节码,解释器就自动释放 GIL 锁,让别的线程有机会执行。
并行:多个 CPU 同时执行多个任务,就好像有两个程序,这两个程序是真的在两个不同的 CPU 内同时被执行。
并发:CPU 交替处理多个任务,还是有两个程序,但是只有一个CPU,会交替处理这两个程序,而不是同时执行,只不过因为CPU执行的速度过快,而会使得人们感到是在“同时”执行
GIL – 也称锁全局解释器锁(global interpreter lock),每个线程在执行时候都需要先获取 GIL,保证同一时刻只有一个线程可以执行代码,即同一时刻只有一个线程使用 CPU ,也就是说多线程并不是真正意义上的同时执行。

Python 进程池 multiprocessing.Pool

Python 进程池 multiprocessing.Pool

Python 进程池 multiprocessing.Pool – Python 进程池 Pool 和前面讲解的 Python 线程池 类似,虽然使用多进程能提高效率,但是进程的创建会消耗大量的计算机资源(进程 Process 的创建远远大于线程 Thread 创建占用的资源),线程是计算机最小的运行单位,连线程都需要使用线程池,进程有什么理由不使用进程池?
Pool 类可以提供指定数量的进程供用户调用,当有新的请求提交到 Pool 中时,如果池还没有满,就会创建一个新的进程来执行请求。如果池满,请求就会告知先等待,直到池中有进程结束,才会创建新的进程来执行这些请求。

Python 进程互斥锁 Lock

Python 进程互斥锁 Lock

Python 进程互斥锁 Lock – 和前面讲到的 Python 线程互斥锁 Lock 类似,当有多个进程 Process 同时读写同一个文件时,为了避免数据读写产生异常,我们需要为正在操作的进程加上互斥锁,互斥锁的原理不管是对线程 threading 还是对进程 Process 而言都是一样。
acquire — 锁定资源;
release — 释放资源;
同一进程的所有线程共享该进程的所有资源,进程与进程之间资源相互独立,互不影响(类似深拷贝);

Python 进程间通信 Queue / Pipe

Python 进程间通信 Queue / Pipe

Python 进程间通信 Queue / Pipe – Python 提供了多种进程通信的方式,主要 Queue 和 Pipe 这两种方式,Queue 用于多个进程间实现通信,Pipe 用于两个进程的通信;
在线程间通信的时候可以使用 Queue 模块完成,进程间通信也可以通过 Queue完成,但是此 Queue 并非线程的 Queue ,进程间通信 Queue 是将数据 pickle 后传给另一个进程的 Queue,用于父进程与子进程之间的通信或同一父进程的子进程之间通信;

Python 进程 Process 与线程 threading 区别

Python 进程 Process 与线程 threading 区别

Python 进程 Process 与线程 threading 区别 – 1.一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程(线程是计算机的最小单位);

2.资源分配给进程,同一进程的所有线程共享该进程的所有资源,进程与进程之间资源相互独立,互不影响(类似深拷贝);

3.多进程模式最大的优点就是稳定性高,因为一个子进程崩溃了,不会影响主进程和其他子进程,多进程模式的缺点是在 Windows 下创建进程开销巨大。另外,操作系统能同时运行的进程数也是有限的,在内存和 CPU 的限制下,如果有几千个进程同时运行,操作系统连调度都会成问题(进程的创建比线程的创建更加占用计算机资源);

4.多线程模式致命的缺点就是任何一个线程挂掉都可能直接造成整个进程崩溃,因为所有线程共享进程的内存;

5.由于 GIL 锁的缘故,Python 中线程实际上是并发运行(即便有多个 CPU ,线程会在其中一个 CPU 来回切换,只占用一个 CPU 资源),而进程才是真正的并行(同时执行多个任务,占用多个 CPU 资源),下面关于并行和并发做一个简单的了解;

Python 进程 Process 模块

Python 进程 Process 模块

Python 进程 Process 模块 – 进程 Process 是对各种资源管理的集合,包含对各种资源的调用、内存的管理、网络接口的调用;一个进程 Process 可以包含多个子进程,启动一个进程的时候会自动创建一个线程,进程里的第一个线程就是主线程(即Python __name__ == ‘__main__’);进程 Process 的创建和线程 threading 的创建非常相似

Python 线程池 ThreadPoolExecutor

Python 线程池 ThreadPoolExecutor(二)

Python 线程池 ThreadPoolExecutor –
1.threadpool — 是一个比较老的模块了,现在虽然还有一些人在用,但已经不再是主流了;
2.concurrent.futures — 目前线程池主要使用这个模块,主流模块;
as_completed 方法是一个生成器,在没有任务完成的时候,会阻塞,在有某个任务完成的时候,就能继续执行 for 循环后面的语句,然后继续阻塞住,循环到所有的任务结束。
和 as_completed 方法不同的是:map 方法能保证任务的顺序性;
wait 方法有点类似线程的 join 方法,能阻塞主线程,直到线程池中的所有的线程都操作完成!

Python 线程优先队列 PriorityQueue

Python 线程优先队列 PriorityQueue

Python 线程优先队列 PriorityQueue – 1.线程队列Queue — FIFO(先进先出队列),即哪个数据先存入,取数据的时候先取哪个数据,同生活中的排队买东西;
2.线程队列LifoQueue — LIFO(先进后出队列),即哪个数据最后存入的,取数据的时候先取,同生活中手枪的弹夹,子弹最后放入的先打出;
3.线程队列PriorityQueue — PriorityQueue(优先级队列),即存入数据时候加入一个优先级,取数据的时候优先级最高的取出;
值得注意的是:在将数据存入到优先队列 PriorityQueue 时,设置的值越小,优先级越高;