golang python性能_Golang构建Python高性能模块
package main
import "C"
//指定那些函数能被外部调用
//export test
func test() int{
//计算 0-1000000000 的和
var s int
for a := 0; a <= 10000000000; a++ {
s += a
}
return s
}
//pxport addstr
func addstr(a,b * C.char) *C.char{
merge := C.GoString(a) + C.GoString(b)
return C.CString(merge)
}
func main(){
}
编译生成动态链接库,生成的.so文件可以被python加载并调用
但是有一个需要注意的地方:
Python是利用ctypes来跟so模块进行交互,其中存在着一个代码的翻译过程,包括数据类型的翻译,如果需要传参获取接收返回值,需要在golang中将参数按照下表对应,定义成C语言的数据类型。
这里列举几个常用的数据类型
go文件编译成动态链接库
go build -buildmode=c-shared -o learn.so learn.go
from ctypes import CDLL
add = CDLL('./test.so').addstr #调用go模块
# 显式声明参数和返回的期望类型
add.argtypes = [ctypes.c_char_p, ctypes.c_char_p]
add.restype = ctypes.c_char_p
print(add('test','test'))
# 无参数,则可直接调用
t = CDLL('./test.so').test #调用go模块
print(t())
python 中调用go模块,并统计两个模块循环10亿次累加的时间,查看go跟python执行效率
# coding=utf-8
import time
from ctypes import CDLL
import ctypes
def xu():
# python 计算累加
sum = 0
for i in range(0,1000000000+1):
sum += i
return sum
if __name__ =="__main__":
add = CDLL('./test.so').addstr #调用go模块addstr方法
# 显式声明参数和返回的期望类型
add.argtypes = [ctypes.c_char_p, ctypes.c_char_p]
add.restype = ctypes.c_char_p
print(add('haha','hehe'))
# go 10亿次累加
start = time.time()
t = CDLL('./test.so').test #调用go模块test方法
t.restype = ctypes.c_int64 # 返回int64类型
print("go执行结果:%s"%t())
end = time.time()
print("go :1000000000 累加耗时 %.2f" %(end-start))
# python累加10亿次
start = time.time()
print("python执行结果:%s"%xu())
end = time.time()
print("python :1000000000 累加耗时 %.2f" %(end-start))
运行结果: 运行速度差近200倍!
golang python性能_Golang构建Python高性能模块相关推荐
- go语言调用python脚本_Golang调用Python
Python是时髦的机器学习御用开发语言,Golang是大红大紫的新时代后端开发语言.Python很适合让搞算法的写写模型,而Golang很适合提供API服务,两位同志都红的发紫,这里就介绍一下正确搅 ...
- 基于 Python 官方 GitHub 构建 Python 文档
1. 下载 Python 的 GitHub 仓库:cpython 从 GitHub 上 clone 仓库很简单,在命令行中执行命令 git clone git@github.com:python/cp ...
- Matlab 生成 Python 包并构建 Python 应用程序
支持:Windows®, Linux®, Mac 如何从 MATLAB® 函数创建 Python® 包并将生成的包集成到 Python 应用程序中. 1.确认安装了与 MATLAB Compiler ...
- python golang相互调用_golang和python互相调用
2018 June 27 go, golang, python golang和python互相调用 网站 综述 golang和python之间,当前可以通过golang的cgo和python的ctyp ...
- 哪些模块可用于python性能分析_Python调用C模块以及性能分析
一.c,ctypes和python的数据类型的对应关系 ctypes type ctype Python type c_char char 1-character string c_wchar wch ...
- go与python区别_golang和python有什么区别?
golang和python有什么区别?下面本篇文章给大家对比一下Python和Golang,介绍一下golang和python的区别.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助. ...
- Python性能分析,Python可是无所不能的!
当我们开始精通编程语言时,我们不仅希望实现最终目标,而且希望使我们的程序高效. 在这个教程中,我们将学习一些Ipython的命令,这些命令可以帮助我们对Python代码进行时间分析. 注意,在本教程中 ...
- kafka python 性能_使用 Python 监控 Kafka Consumer LAG
我在要完成这个需求的时候大概有两个思路. 第一种方法: 我们直接使用 Kafka 提供的 bin 工具,去把我们关心的 lag 值 show 出来然后通过代码处理一下报出来.例如: 我们可以起个远程的 ...
- Python性能优化
http://blog.csdn.net/pipisorry/article/details/39998317 python 作为脚本的一个不足之处,那就是执行效率和性能不够理想,特别是在 perfo ...
最新文章
- 使用Valgrind的callgrind做c/c++代码的code profiling/性能调优
- “勒索病毒”为什么盯上了比特币?
- iOS GCD, 同步,异步,串行队列,并行队列,dispatch_group
- 详细介绍 Qt Creator 快捷捷应用
- Angular学习笔记第一节 基本概念
- flask的请求与响应
- python3.7打包exe后有显示no utf-8_pyinstaller 打包生成exe之后运行提示‘no module name 'xxx'’错误...
- Android世界第一个activity启动过程
- 如何管理和组织一个机器学习项目
- java获取oracle自增_java相关:MyBatis Oracle 自增序列的实现方法
- python 入侵服务器_一个入侵iis服务器的简单案例
- 友情链接对于网站来说有什么作用?
- Android源码解析系列
- SOCOFing指纹数据集
- 思科 接入点 本地转发_H3C无线AP本地转发配置教程2016
- 云计算大数据中心(清明作业)
- Chrome渲染分析之Rendering工具使用
- 结对编程项目——最长英语单词链
- termux是等于linux终端,termux终端
- 军备竞赛!奔驰全球“扩招”3000名软件工程师,2024年推MB.OS
热门文章
- JS浮点数运算Bug的解决办法(转自百度文库)
- 数学基础学习随笔--序言
- HTML如何在按钮右侧显示div,如何实现点击页面中的一个按钮相应位置的div显示隐藏?...
- linux获取互联网时间,linux中用shell获取时间,日期
- unity 弹出式菜单_Java Swing JMenu和JPopupMenu:菜单和弹出式菜单
- 科普 | 12个关键词,告诉你到底什么是机器学习
- Cpp拾零(to be continued)
- 计算机无法识别华为m3,华为8寸M3(非青春版)电脑连接问题报告
- 【RFID】基于MATLAB的RFID 系统的空中接口过程以及防碰撞算法仿真
- Windows Server 2008 R2 如何启用WINS服务