Python 中的并发编程

threading 线程库

首先需要知道,在 Python 中,由于 GIL 全局锁的存在,Python 中的多线程不能提高计算型任务的执行效率,只适合用来处理逻辑上需要并发执行的任务:IO 操作以及其它需要等待或者可以退入后台执行的任务。

某条需要不断等待用户的指示才能进行的逻辑流;在用户触发某个条件后,需要执行的任务会造成延迟但又是与用户无关的逻辑流。这些都是与计算效率无关,但在逻辑上很有必要并发运行的场景。

在 Python 中,可以将任何可调用的对象和参数传入 threading.Thread() 函数,如果有必要的话,也可以同时也可以传入指定线程名字的参数。

通过 threading.Thread() 函数,可以建立一个可分离的线程实例,通过调用 start() 方法,就可以进入系统内核,由内核调度,并发执行。

是的,在 Python 中,子线程默认为可分离,这与 Unix 系统中的默认行为不一样。当主线程,也就是默认的 Python 逻辑流在某一个节点处主要等待某一个线程结束之后才能继续时,可以调用目标线程的 join() 方法,将其设置为可结合的。

多线程通信

当涉及多个线程间需要进行数据共享时,一般情况下,最好使用线程安全的 queue.Queue。

线程池

在典型的服务器事务中,可以创建线程池,当需要运行一个线程时,只需要将其提交到线程池中即可。

使用线程池的原因在于,通常需要避免写线程数量可以无限增长的程序,那样很容易成为攻击中薄弱环节。


不知是该恭喜,还是该怎样,总之阅读到该文的,你是第 人。每一次刷新,都是不同的自己。