前言
全局解释锁(GIL)
在python多线程编程学习之前,十分有必要了解下什么叫python的全局解释锁(GIL),这里我简单介绍下这个锁的作用:
- 任何一个时间点只有一个线程处于执行状态
- 多个CPU核的多线程框架下都只允许一次运行一个线程
看到上面两个说明,简直崩溃,单核一个时间点只允许一个线程执行我就忍了,多核也是一样,简直不能忍,所以在做某一任务时,我们需要如下考虑:
1) 假设我们的机器是单核
- 如果这个任务多数时间都是数学计算,那单线程要好于多线程的,乖乖用单线程
- 如果这个任务多数时间都是IO计算,那多线程要好于单线程的,试试多线程
2) 假设我们的机器是多核
- 那可以试试多进程,是不是要用多线程按照单核机器的情况考虑
多线程编程
方法1
这里我强烈推荐使用ThreadPoolExecutor,这是个已经很成熟的多线程包,它帮你做好多线程池,用起来也很方便,三步就可以搞定,示例如下:
from concurrent.futures import ThreadPoolExecutor
#1 建立线程池,大小为3
executor = ThreadPoolExecutor(3)
#2 创建需要并行执行的函数
def task(data):
print("測試任務")
#3 将需要并行处理的方法塞入已经建立好的线程池中
#task为对应的方法,data为task函数需要接收的参数
executor.submit(task, data)
方法2
这个就只能自己裸写了,待续 >>>