Python 的多线程的缺陷

2015年08月11日 23:45 by:唠吧小站

目前支持多线程的解释型语言(perl 的多线程是残疾,Python的多线程是有compromise的,在任意时间只有一个Python解释器在解释Python bytecode。

如果你的代码是CPU密集型,多个线程的代码很有可能是线性执行的。这种情况下python的多线程是鸡肋,效率可能还不如单线程因为有context switch

但是:如果你的代码是IO密集型,多线程可以明显提高效率。例如制作爬虫,绝大多数时间爬虫是在等待socket返回数据。某个线程等待IO的时候其他线程可以继续执行。

反过来讲:你就不应该用Python写CPU密集型的代码…效率摆在那里…

CPU密集型和I/O密集型区别

如果确实需要在CPU密集型的代码里用concurrent,就去用multiprocessing库。这个库是基于multi process实现了类multi thread的API接口,并且用pickle部分地实现了变量共享。

现concurrent.futures包含ThreadPoolExecutor和ProcessPoolExecutor,比multiprocessing更简单。

标签:多线程 python