python GIL
程序员文章站
2022-11-22 10:17:13
Python并不支持真正意义上的多线程。Python中提供了多线程包,但是如果你想通过多线程提高代码的速度,使用多线程包并不是个好主意。 Python中有一个被称为Global Interpreter Lock(GIL)的东西,它会确保任何时候你的多个线程中,只有一个被执行。 线程的执行速度非常之快 ......
python并不支持真正意义上的多线程。python中提供了多线程包,但是如果你想通过多线程提高代码的速度,使用多线程包并不是个好主意。
python中有一个被称为global interpreter lock(gil)的东西,它会确保任何时候你的多个线程中,只有一个被执行。
线程的执行速度非常之快,会让你误以为线程是并行执行的,但是实际上都是轮流执行。经过gil这一道关卡处理,会增加执行的开销。
这意味着,如果你想提高代码的运行速度,使用threading包并不是一个很好的方法。
不过还是有很多理由促使我们使用threading包的。如果你想同时执行一些任务,而且不考虑效率问题,那么使用这个包是完全没问题的,而且也很方便。
但是大部分情况下,并不是这么一回事,你会希望把多线程的部分外包给操作系统完成(通过开启多个进程),或者是某些调用你的python代码的外部程序(例如spark或hadoop),又或者是你的python代码调用的其他代码(例如,你可以在python中调用c函数,用于处理开销较大的多线程工作)。
本文首发于,博客园同步更新