Python多线程总结
因此,解释器实际上被一个全局解释器锁保护着,它确保任何时候都只有一个Python线程执行。在多线程环境中,Python 虚拟机按以下方式执行: 由于GIL的存在,Python的多线程不能称之为严格的多线程。
但是:如果你的代码是IO密集型,多线程可以明显提高效率。例如制作爬虫(我就不明白为什么Python总和爬虫联系在一起…不过也只想起来这个例子…),绝大多数时间爬虫是在等待socket返回数据。
Python中的多线程和多进程都是用于实现并发编程的技术,但是它们之间有一些区别。多线程是在一个进程中运行多个线程,而多进程是在一个进程中运行多个程序。
python多线程并发数量控制
python多线程如果不进行并发数量控制,在启动线程数量多到一定程度后,会造成线程无法启动的错误。控制多线程并发数量的方法有好几钟,下面介绍用queue控制多线程并发数量的方法。
使用线程池可以有效地控制系统中并发线程的数量。当系统中包含有大量的并发线程时,会导致系统性能急剧下降,甚至导致 Python 解释器崩溃,而线程池的最大线程数参数可以控制系统中并发线程的数量不超过此数。
使用 threading 库里面的锁对象 Lock 去保护 Python中的多进程是通过multiprocessing包来实现的,和多线程的threading.Thread差不多,它可以利用multiprocessing.Process对象来创建一个进程对象。
python多进程中同一时间到底有几个线程在运行
1、进程只能在一个时间做一个任务,如果想同时做两个任务或多个任务,就必须开启多个进程去完成多个任务。进程在执行的过程中如果阻塞,例如等待输入,整个进程就会挂起,即使进程中有些工作不依赖于输入的数据,也将无法执行。
2、Python效率到底高不高?到底是不是鸡肋?Python由于有全锁局的存在(同一时间只能有一个线程执行),并不能利用多核优势。
3、每个CPU在同一时间只能执行一个线程 在单核CPU下的多线程其实都只是并发,不是并行,并发和并行从宏观上来讲都是同时处理多路请求的概念。
4、python 的GIL规定每个时刻只能有一个线程访问python虚拟机,所以你要用python的多线程来做计算是很不合算的,但是对于IO密集型的应用,例如网络交互来说,python的多线程还是非常给力的。
5、在Python多线程下,每个线程的执行方式:获取GIL 执行代码直到sleep或者是python虚拟机将其挂起。
6、多进程可以在不同的进程中运行 Python 代码,每个进程都有自己的 GIL,因此可以实现真正的并行计算。而协程则是一种轻量级的线程,它不需要像线程一样占用系统资源,只需要在程序内部切换来实现并发计算。
本文由 阿林 文章来源于网络如需要删除联系作者:http://www.youhonglin.com/36496.html