当前位置: 首页 > news >正文

专门做消防器材的网站天眼查企业查询入口

专门做消防器材的网站,天眼查企业查询入口,线上推广是什么意思,网站开发职业认知小结在写一些对性能要求十分严格的功能的时候#xff0c;python往往力不从心。毕竟是一个解释性的语言#xff0c;没有办法和变异性的语言去比较速度和内存占用率。但是python的本身的特定就使得我们可以将耗时的操作移交给编译性的语言去实现。由于项目上的关系#xff0c;需要…在写一些对性能要求十分严格的功能的时候python往往力不从心。毕竟是一个解释性的语言没有办法和变异性的语言去比较速度和内存占用率。但是python的本身的特定就使得我们可以将耗时的操作移交给编译性的语言去实现。由于项目上的关系需要对迸发有着比较严格的要求所以想到了go语言。这里介绍一下如何使用python调用go语言的代码。python调用go语言是通过c语言实现的可以将go语言打包成so然后让python通过ctypes加载so文件来实现python调用go语言。这里介绍在linux上实现的方式在windows上应该需要改变编译的指令。首先是go方面的代码main.go文件package mainimport Cimport fmt//export Sumfunc Sum(a, b int) int {    return a b}//export Testfunc Test() int {    var s int   for i : 0; i 1000000; i {       s i   }    return s}func main() {   fmt.Println(Test())}其中Sum函数上方的//export Sum是必须的没有这个注释不会被识别成为导出的对象。export后面的字符是导出后的名字。import C也是必须的。使用如下指令编译go build -buildmodec-shared -o sum.so main.gosum.so是编译后的文件main.go是要编译的文件。编译完成后会在当前目录生成sum.so,和sum.h文件。这里来看一下sum.h文件下面截取了一段关键的代码#ifdef __cplusplusextern C {#endifextern GoInt Sum(GoInt p0, GoInt p1);extern GoInt Test();#ifdef __cplusplus}#endif可以看到导出了一个Sum函数和一个Test函数如果不写//export funcname是不会有这个的。将sum.so和sum.h放到python的目录下面。然后再来编辑test.py文件这个文件和sum.so同目录下即可。test.pyfrom ctypes import CDLLimport ctypesif __name__ __main__:   test CDLL(./sum.so).Test   test.restype ctypes.c_int64   print(test())使用CDLL(./sum.so)加载so模块然后使用.Test导向Test函数这里必须和sum.h里一致。test.restype ctypes.c_int64将Test的函数返回类型声明为int64在这里的机器上默认的结果使用的返回类型为int32会得到一个错误的结果。需要显示的声明为int64。最后使用test()来调用。运行程序查看结果。除了上面的定义返回值得类型还可以定义传入参数的类型上面的代码中还定义了一个sum函数。sum CDLL(./sum.so).Sum   sum.argtypes [ctypes.c_int32, ctypes.c_int32]   sum.restype ctypes.c_int32   print(sum(1, 2))argtypes将接受一个列表类型里面是各个参数的类型。来测试一下调用go语言代码的速度和用python自己写的速度有什么区别。from ctypes import CDLLimport ctypesimport datetimedef speedTest():   sum 0   for i in range(1000000):       sum i    return sumif __name__ __main__:   test CDLL(./sum.so).Test   test.restype ctypes.c_int64   start datetime.datetime.now()    for i in range(10):       test()   end datetime.datetime.now()   print(end - start)   start datetime.datetime.now()    for i in range(10):       speedTest()   end datetime.datetime.now()   print(end - start)   print(done)go的代码就不放出来了和python一样也就用for循环计算累加1000000的值。其实这里的测试不太严谨但是不影响粗略来看测试的结果。可以发现两者的速度根本就不是一个数量级的。这还仅仅只是时间上的差距内存上的差距还没有去看。所以如果对项目的耗时非常严格的话不妨将其中的耗时操作交给go甚至是c语言去实现能极大提升性能。一般来说往函数传递参数的时候不只是需要传递int值需要穿钉string值。这个时候问题就来了传递一个string值会怎么样//export printStringfunc printString(a string) {   fmt.Println(a)}来看看头文件#ifdef __cplusplusextern C {#endifextern void printString(GoString p0);#ifdef __cplusplus}#endif可以看到函数的参数类型为GoString这个类型是c语言没有的。往上翻翻能看到GoString的定义typedef struct { const char *p; ptrdiff_t n; } _GoString_;是一个结构体有一个char类型的指针和一个代表长度的整数n。那么在调用这个函数的时候就需要传递一个GoString的值进去。python侧需要自己来写这个结构体定义。class GoString(ctypes.Structure):   _fields_ [(p, ctypes.c_char_p), (n, ctypes.c_longlong)]接下去构建参数传递msg GoString(bhello,world!,len(bhello,world!))printString(msg)这里得使用字节流才行因为是C的char类型指针。最后设置接收类型为定义好的GoString就能调用了。同理也可以把返回值设置为string在python里面也可以用这个GoString这个类给读出来。但是直接输出会输出一个内存地址需要用result.p来输出这个也是一个字节流。其他诸如go的map和chan在导出的时候都会被标识为void *读取起来非常麻烦而slice需要一个结构体来实现。class GoSlice(Structure):    _fields_ [(data, POINTER(c_void_p)), (len, c_longlong), (cap, c_longlong)]最后说一下限制go语言写的结构体是没有办法导出的所以结果的交互要用结构体的时候尽量用json之类的封装一下。声明由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失均由使用者本人负责雷神众测以及文章作者不为此承担任何责任。雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章必须保证此文章的完整性包括版权声明等全部内容。未经雷神众测允许不得任意修改或者增减此文章内容不得以任何方式将其用于商业目的。注释本文来自公众号雷神众测
http://www.pierceye.com/news/3010/

相关文章:

  • 化妆品网站设计开题报告酒店seo是什么意思
  • 开发手机网站用什么好如何注册一个平台
  • 摄影网站设计模板破解版游戏盒子大全
  • 徐州金桥建设监理有限公司网站百度搜索关键词优化方法
  • 快速让百度收录网站仿腾讯视频网站
  • 网站开发 哪个工具更快顺德网站
  • 做网站多少钱西宁君博示范网站经营性备案条件
  • 北京西城区建设网站优设网页设计
  • 苏州网页服务开发与网站建设wordpress 内存使用教程
  • 如何做网站推广 求指点网站里的图片切换怎么做
  • 域名备案网站购买赣州vi设计公司
  • 成都网站建设单招网企业信息查询系统官网山东
  • 十堰网站设计公司高德地图网页版
  • wap 网站模板软件开发前端需要学什么
  • 杭州哪个网站建设最好wordpress开发门户网站
  • 西乡做网站多少钱网站标签优化怎么做
  • 网站建站网站设计公司做网站选大公司好还是小公司好
  • 东莞建网站哪家强seo排名快速优化
  • 做淘宝那样的网站麻烦吗简约智能设备制造公司网站
  • 官方网站建设账务处理湖北网络推广公司
  • 网站的建设分析及意义wordpress归档插件
  • 做影视网站对宽带要求全国十大网站建设公司
  • 中国建设银行青海分行网站北大青鸟网站开发
  • 做网站的公司深网站怎样添加百度地图
  • 在东莞找工作上哪个网站网站开发员纵向发展
  • 需要网站建设的人多吗最好网页设计流程
  • 网站推广策划思维导图网站设计团队分工
  • 网站怎么找的wordpress搜索框插件
  • 汕头网站建设过程宝塔在本地搭建wordpress
  • 网站建设必须要虚拟主机吗自己动手做一个网页