永发信息网

为什么有人说 Python 的多线程是鸡肋

答案:2  悬赏:60  手机版
解决时间 2021-02-07 05:54
  • 提问者网友:愿为果
  • 2021-02-06 06:35
为什么有人说 Python 的多线程是鸡肋
最佳答案
  • 五星知识达人网友:猎心人
  • 2021-02-06 07:37
因为Python的全局解释器锁(Global Interpreter Lock,GIL)强制要求Python只能在一个解释器中进行,也就是说即使你有多个处理器,Python也只能使用其中的一个,线程实际上是在串行运行。如果只有一个处理器,那么Python的线程和其他语言没什么区别,但如果有两个及以上就不同了,其他语言可以使用所有处理器,但Python只能使用一个。
假如在单核处理器中,Python的效率可以达到百分之百,那么在双核处理器中,它的效率只有百分之五十,因为它只能使用一个处理器,另一个是闲置的,效率并没有因为多了一个处理器而得到提高,所以说Python的多线程有点鸡肋。
除非可以去除GIL,否则应该尽量避免使用Python的多线程。
注:另外很多任务是可以用Python的协程来完成的,用协程来代替多线程是个不错的选择
全部回答
  • 1楼网友:醉吻情书
  • 2021-02-06 08:50
差不多是这样子。多线程目前仅用于网络多线程采集, 以及性能测试。 其它的语言也有类似的情况,线程本身的特点导致线程的适用范围是受限的。只有cpu过剩,而其它的任务很慢,此时用线程才是有益的,可以很好平衡等待时间,提高并发性能。 线程的问题主要是线程的安全稳定性。线程无法强制中止,同时线程与主进程共享内存,可能会影响主进程的内存管理。 在python里线程出问题,可能会导致主进程崩溃。 虽然python里的线程是操作系统的真实线程。 那么怎么解决呢?通过我们用进程方式。子进程崩溃后,会完全的释放所有的内存和错误状态。所以进程更安全。 另外通过进程,python可以很好的绕过gil,这个全局锁问题。 但是进程也是有局限的。不要建立超过cpu总核数的进程,否则效率也不高。 简单的总结一下。 当我们想实现多任务处理时,首先要想到使用multiprocessing, 但是如果觉着进程太笨重,那么就要考虑使用线程。 如果多任务处理中需要处理的太多了,可以考虑多进程,每个进程再采用多线程。如果还处理不要,就要使用轮询模式,比如使用poll event, twisted等方式。如果是gui方式,则要通过事件机制,或者是消息机制处理,gui使用单线程。 所以在python里线程不要盲目用, 也不要滥用。 但是线程不安全是事实。如果仅仅是做几个后台任务,则可以考虑使用守护线程做。如果需要做一些危险操作,可能会崩溃的,就用子进程去做。 如果需要高度稳定性,同时并发数又不高的服务。则强烈建议用多进程的multiprocessing模块实现。 在linux或者是unix里,进程的使用代价没有windows高。还是可以接受的。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯