0 { n -= 1 }} func main" />
0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Go语言比Python强多少

科技绿洲 来源:Python实用宝典 作者:Python实用宝典 2023-11-02 14:05 次阅读

1.都说Go语言性能非常强大,那么到底比Python强多少?

为了比较Go语言和Python语言在单线程性能上的差距,我们可以做一个简单实验,从1亿减到1:

Python代码(以下均分别提供图片和文字版代码):

图片

import time


def decrement(n):
    while n > 0:
         n -= 1


start = time.time()
decrement(100000000)
end = time.time()
print(f"{end - start}s.")

结果如下:

图片

Python大约需要4秒-5秒才能完成这项工作,那么Go语言呢?

图片

package main
import "fmt"
import "time"


var c chan int


func decrement(n int) {
    for n > 0 {
        n -= 1
    }
}


func main() {
    start := time.Now()
    decrement(100000000)
    fmt.Println(time.Since(start))
}

结果如下:

图片

确实,两者差了不止100倍,看得出来Go是一个比较有前途的语言,具有强大的性能(除此之外,它还有简单易学、能轻松实现高并发的特点)。

不过,它的社区建设和Python相比还是有很大的差距,许多第三方库依然还没有支持Go语言,因此,它想要替代Python还有非常长的路要走。

2.Go性能强大、Python社区强大,两者能否结合起来?

我们试试看能否在Python中调用Go的方法,在Go中从1亿减到1。

首先,将刚刚go语言版的1亿减到1改为在一个函数中进行,并返回结果:

图片

package main


import (
    "C"
    "time"
)


var c chan int


func decrement(n int) {
    for n > 0 {
        n -= 1
    }
}


//export count_time
func count_time() *C.char {
    start := time.Now()
    decrement(100000000)
    total_time := time.Since(start).String()
    return C.CString(total_time)
}


func main() {}

然后生成动态链接库以便Python调用Go里写的函数:

go build -buildmode=c-shared -o main.so count.go

这样会在当前文件夹中生成 main.so 和 main.h.

在Python中我们需要加载该生成的main.so动态链接库,并配置好输出变量的类型,最后调用方法得到结果:

图片

import time
from ctypes import cdll, c_char_p


start = time.time()


# 加载动态链接库
lib = cdll.LoadLibrary('./main.so')


# 配置输出参数变量类型
lib.count_time.restype = c_char_p


# 调用方法
rest = lib.count_time()


end = time.time()


print(f"Go 内部执行时间:{rest}")
print(f"Python 整体执行时间: {end - start}s")

结果如下:

图片

可以看到,使用这个方案将Python和Go两者结合起来的性能依然非常高,但就是多了一个生成和调用动态链接库的过程,增加了代码的耦合性。

其实,这也是C+Python的开发方式,只不过我们将C换成了Go,因为Go开发起来实在是舒服多了。

如果以后你的Python代码中有某个部分计算特别复杂,你可以尝试将其改写成go,通过动态链接库的方式调用go写的代码,将能大大提高性能。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • python
    +关注

    关注

    56

    文章

    4795

    浏览量

    84656
  • 动态链接库
    +关注

    关注

    0

    文章

    11

    浏览量

    7066
  • go语言
    +关注

    关注

    1

    文章

    158

    浏览量

    9047
  • 单线程
    +关注

    关注

    0

    文章

    17

    浏览量

    1771
收藏 人收藏

    评论

    相关推荐

    Go语言开发有什么优势?怎么学?

    带来的各种问题。  3. 性能优异。Go的性能只C/C++减少了10%左右。相对其他脚本(python/php),性能具有巨大的优势。  那么,Go
    发表于 12-19 16:08

    Go开发语言的优势在哪里?

    Go语言是谷歌发布的第二款开源编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性,并专门针对多处理器系统应用程序的编程进行了优化,开发速度极快,可以与C或C++媲美,而且更加安全、支持并行
    发表于 03-22 15:04

    python和别的语言所具备的优势

    世界上的编程语言有600多种,但真正主流使用的也仅有二三十种,且随着计算机的发展,新的语言在不断的诞生,过时的语言也在不断的被淘汰,因此,IT开发人员应与时俱进学习主流编程语言
    发表于 04-13 14:57

    网易有道CEO周枫推荐Go语言并介绍Go语言的3个优点

    网易有道CEO周枫推荐Go语言。他认为Go很好地继承了C语言灵活、简单有效的思想;Go有很高的生产效率;
    的头像 发表于 01-31 14:11 5208次阅读

    Python 转向 Go语言的9大原因和3大缺点

    转用一门新语言通常是一项大决策,尤其是当你的团队成员中只有一个使用过它时。今年 Stream 团队的主要编程语言Python 转向了 Go。本文解释了其背后的九大原因以及如何做好这
    发表于 06-17 07:40 6818次阅读

    我们在使用Go语言编程之前有什么呢?为什么选择Go语言编程?

    对于我们的案例,Go 语言由于自己的多线程模块和 CPU 可伸缩性获得了较好的性能。无论什么时候我们需要执行一些内部的请求,我们可以使用 Goroutine 来分别执行,这个 Python
    的头像 发表于 07-10 14:19 4003次阅读

    GoPython,Erlang的语言对比分析和Go编程示例概述

    本文对GoPython、Erlang做了一些有趣的分析对比,相信大家能从中感受到Go语言的强大和与众不同。
    的头像 发表于 07-21 09:52 7729次阅读
    <b class='flag-5'>Go</b>和<b class='flag-5'>Python</b>,Erlang的<b class='flag-5'>语言</b>对比分析和<b class='flag-5'>Go</b>编程示例概述

    Go语言其实有很多优良特性,很多时候都可以代替Python

    Go 要想撼动编程界的常青树 Java 二十多年的地位无疑难度颇大。据 HackerRank 数据显示,2018 年,Java 在开发者最受欢迎的编程语言排行榜中仍然排名第 2,Python 排名第 4,
    的头像 发表于 02-13 10:01 4728次阅读

    苹果a14a13强多

    A14a13强多少?这可能是网友们最想知道的一个答案,最近苹果发布了A14,但是并不是搭载在iPhone12上,所以用户朋友们就对搭载A14的iPhone更加期待了,那么A14A13强多
    的头像 发表于 11-19 14:47 3.6w次阅读

    详解GO语言的趋势与使用情况

    Go 语言简单易学、性能优良。JetBrains Blog 发布了Go 语言的调查报告,看看GO 语言
    的头像 发表于 03-17 11:05 3048次阅读

    go语言枚举类型怎么用

    go 语言枚举类型是这么用的?在什么场景下会用到枚举?本文对 go 语言枚举做了详细讲解。 枚举,是一种重要的数据类型,由一组键值对组成,通常用来在编程
    的头像 发表于 09-02 09:43 5178次阅读

    go语言中怎么使用HTTP代理

    go语言中怎么使用HTTP代理。
    的头像 发表于 09-01 14:41 2418次阅读

    Go/Rust挑战Java/Python地位

    编程语言方面,Java 和 Python 仍然遥遥领先,并且分别微小增长了 1.7% 和 3.4%;围绕 Go (增长 20%) 和 Rust (增长 22%) 的兴趣则大幅增加。报告称,如果这种
    的头像 发表于 03-06 10:19 701次阅读

    Go能取代Python成为开发者的首选语言吗?

    过去的很多年,Python是人工智能和数据科学领域最受欢迎的编程语言。5G时代来临后,Python有点「力不从心」......Python是一个解释性
    发表于 08-03 10:11 466次阅读
    <b class='flag-5'>Go</b>能取代<b class='flag-5'>Python</b>成为开发者的首选<b class='flag-5'>语言</b>吗?

    如何让PythonGo互相调度

    我们曾经研究过如何让PythonGo互相调度,当时发现,将Go语言写的模块打包成动态链接库,就能在Python中进行调度: 优劣互补!
    的头像 发表于 11-02 11:24 612次阅读
    如何让<b class='flag-5'>Python</b>和<b class='flag-5'>Go</b>互相调度