美文网首页
为什么有人说python的多线程是鸡肋呢?

为什么有人说python的多线程是鸡肋呢?

作者: chaaffff | 来源:发表于2018-08-27 21:40 被阅读0次

GIL blablabla concurrent blablabla

简单地说就是作为可能是仅有的支持多线程的解释型语言(perl的多线程是残疾,PHP没有多线程),Python的多线程是有compromise的,在任意时间只有一个Python解释器在解释Python bytecode。

UPDATE:如评论指出,Ruby也是有thread支持的,而且至少Ruby MRI是有GIL的。

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

但是:如果你的代码是IO密集型,多线程可以明显提高效率。例如制作爬虫(我就不明白为什么Python总和爬虫联系在一起…不过也只想起来这个例子…),绝大多数时间爬虫是在等待socket返回数据。这个时候C代码里是有release GIL的,最终结果是某个线程等待IO的时候其他线程可以继续执行。

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

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

再加一条,如果你不知道你的代码到底算CPU密集型还是IO密集型,教你个方法:

multiprocessing这个module有一个dummy的sub module,它是基于multithread实现了multiprocessing的API。

假设你使用的是multiprocessing的Pool,是使用多进程实现了concurrency

from multiprocessing import Pool

如果把这个代码改成下面这样,就变成多线程实现concurrency

from multiprocessing.dummy import Pool

两种方式都跑一下,哪个速度快用哪个就行了。

UPDATE:

刚刚才发现concurrent.futures这个东西,包含ThreadPoolExecutor和ProcessPoolExecutor,可能比multiprocessing更简单

相关文章

  • Python 多进程与多线程

    前言:为什么有人说 Python 的多线程是鸡肋,不是真正意义上的多线程? 看到这里,也许你会疑惑。这很正常,所以...

  • 为什么有人说python的多线程是鸡肋呢?

    GIL blablabla concurrent blablabla 简单地说就是作为可能是仅有的支持多线程的解释...

  • 多进程比之多线程

    最近在看Python的多线程,经常我们会听到老手说:“Python下多线程是鸡肋,推荐使用多进程!”,但是为什么这...

  • python多线程

    最近在看Python的多线程,经常我们会听到老手说:“Python下多线程是鸡肋,推荐使用多进程!”,但是为什么这...

  • 06.系统编程-4.多线程和GIL

    为什么有人会说 Python? 多线程是鸡肋?知乎上有人提出这样一个问题,在我们常识中,多进程、多线程都是通过并发...

  • python多线程是大家所说的鸡肋吗?看过这篇就知道了!

    为什么有人会说 Python 多线程是鸡肋?知乎上有人提出这样一个问题,在我们常识中,多进程、多线程都是通过并发的...

  • Python的GIL

    为什么有人会说 Python 多线程是鸡肋?知乎上有人提出这样一个问题,在我们常识中,多进程、多线程都是通过并发的...

  • Python 的多线程是鸡肋?

    “唉,还没毕业就受到甲方的支配,等以后进了公司可咋整啊。”小白嘴里这么吐槽,但心理上还是不敢怠慢,只能恋恋不舍地关...

  • 鹅厂分享会丨关于python多线程的思考

    导语丨在知乎等地方经常看到有人问,Python的多线程是不是鸡肋?为何我用多线程性能一点没有提升,有时候性能反而下...

  • 线程、进程

    多线程 在介绍Python中的线程之前,先明确一个问题,Python中的多线程是假的多线程!为什么这么说,我们先明...

网友评论

      本文标题:为什么有人说python的多线程是鸡肋呢?

      本文链接:https://www.haomeiwen.com/subject/guqxwftx.html