python中的多线程求值串行和并行_Python多线程辣鸡?那要怎样并行运算呢?

本文探讨了Python中的多线程在GIL限制下的表现,通过测试展示了线程池(ThreadPool和DummyPool)与进程池(ProcessPool)在纯运算和IO操作场景下的效率差异。在纯运算中,多线程并不提高速度,但在高IO场景下,多线程能提升效率。多进程通常比多线程更快,尤其是在返回结果时,进程间的通信成本会导致效率降低。
摘要由CSDN通过智能技术生成

前言

Python在并行运算方面因为GIL(Global Interpreter Lock,全局解释器锁)而饱受诟病,认为Python的多线程其实是伪的,很鸡肋,这里就大致讲解下吧,

在Python的原始解释器CPython中存在着GIL,因此在解释执行Python代码时,会产生互斥锁来限制线程对共享资源的访问,直到解释器遇到I/O操作或者操作次数达到一定数目时才会释放GIL

所以有GIL效果就是:** 一个进程内同一时间只能允许一个线程进行运算 ** (这尼玛不就是单线程吗?)

至于为什么要有GIL?只能说这是个历史遗留问题了,人家发明Python的时候压根就没想到现在居然有多核CPU,甚至多CPU的电脑啊~

再至于为什么GIL没有被优化掉,总是有人家的考虑的,反正Python3也继续了GIL的优良传统,爱用不用,有兴趣的自行搜索GIL吧

我这里尽量用事实说话,直接黑盒测试下常见的几种并行运算方式

正文

测试环境:

电脑:

我的电脑

Python: 2.7.10

我都是使用 multiprocessing 模块进行对比,对比三种常见的使用情况,我分别取名(非官方):ThreadPool,DummyPool,ProcessPool

引入方式如下:

from multiprocessing.pool import ThreadPool

from multiprocessing.dummy import Pool as DummyPool

from multiprocessing import Pool as ProcessPool

说明: ThreadPool,DummyPool 都是线程池,ProcessPool 是进程池

测试代码如下:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# by vellhe 2017/7/1

from multiprocessing.pool import ThreadPool

from multiprocessing.dummy import Pool as DummyPool

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值