python调用golang编译的动态链接库

当前任务:抓取页面,然后删除回车,tab和空格,然后打印出来。
最初是在raspberry上做的测试。使用新浪作为测试网站。

python部分文件名 gradAndDel.py

#!/bin/env python
# -*- coding:utf-8 -*-
# -------------------------------
# Date:        2016-01-21
# Author:      simonzhang
# Web:         www.simonzhang.net
# Email:       simon-zzm@163.com
# -------------------------------
import urllib

url = "http://www.sina.com.cn/"

data = rullib.urlopen(url).read()
data = data.replace('\n', '')
data = data.replace('\t', '')
data = data.replace(' ', '')
print data

使用时间如下
real 0m2.878s
user 0m1.910s
sys 0m0.240s

golang文件名gradAndDel.go

package main

import (
    "fmt"
    "io/ioutil"
    "net/http"
    "strings"
)

func main() {
    resp, err := http.Get("http://www.sina.com.cn")

    if err != nil {
        fmt.Println("http get error.")
    }
    defer resp.Body.Close()

    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        fmt.Println("http read error")
    }

    src := string(body)

    src = strings.Replace(src, "\n","",-1)
    src = strings.Replace(src, "\t","",-1)
    src = strings.Replace(src, " ","",-1)
    fmt.Println(strings.TrimSpace(src))
}

使用时间如下:
real 0m0.718s
user 0m0.290s
sys 0m0.090s

使用golang比python快差不多4倍(使用requests模块抓取显示中文乱码,暂时没有找原因)。

golang1.5后可以将go语言编译为动态链接库。
这样使用python处理业务逻辑,然后调用golang的动态链接库加速执行速度。
但是在raspberry pi上调用的时候报段错误。没有细查,直接放到64位Linux服务器上测试。

要产生动态的链接库的golang代码gradAndDelso.go

/*
# Date:        2016-01-21
# Author:      simonzhang
# Web:         www.simonzhang.net
# Email:       simon-zzm@163.com
*/
package main

import ("C"
        "fmt"
        "net/http"
        "io/ioutil"
        "strings"
       )


//export Deltr
func Deltr(webdata *C.char) *C.char {
    var src string
    url := C.GoString(webdata)
    src = string(grad(url))
    src = strings.Replace(src, "\n","",-1)
    src = strings.Replace(src, "\t","",-1)
    src = strings.Replace(src, " ","",-1)
    data := C.CString(src)
    return data
}

//export grad
func grad(url string) string{
    resp,err := http.Get(url)
    if err != nil {
        fmt.Println("http get error.")
    }
    defer resp.Body.Close()
    body,_ := ioutil.ReadAll(resp.Body)
    if err != nil {
        fmt.Println("http eee error.")
    }
    goback := string(body)
    return goback
}

func main() {}

编译命令
go build -buildmode=c-shared -o gradAndDelso.so gradAndDelso.go

编译完成会产生两个文件,一个so和一个h文件。
使用python调用golang动态链接库部分,代码文件userGoSo.py

#!/bin/env python
# -*- coding:utf-8 -*-
# -------------------------------
# Date:        2016-01-21
# Author:      simonzhang
# Web:         www.simonzhang.net
# Email:       simon-zzm@163.com
# -------------------------------
import ctypes

lib = ctypes.CDLL("./gradAndDelso.so")
url = "http://www.sina.com.cn"
re = lib.Deltr
re.argtypes = [ctypes.c_char_p]
re.restype = ctypes.c_char_p
print re(url)

使用时间
real 0m0.893s
user 0m0.068s
sys 0m0.024s

在64位的服务器上python、golang和python调用golang的动态链接库速度基本上一样没有区别。
如果是处理复杂的运算golang应该比python快很多,实际项目中可以试试。
golang开发的代码量比python还是大不少,编译后的文件有6M,动态链接库8M,个人感觉这部分太大了。

本文源码打包pythonUserGolangLib

0 thoughts on “python调用golang编译的动态链接库

  1. Бурение скважин на воду в Минске: Автономное водоснабжение

    Одним из ключевых моментов для дачников является доступ к чистой воде. Лучший вариант для подачи воды – это пробурить собственную скважину. Это особенно важно для жителей Минска и области, где найти профессионалов не составит труда. В данной статье мы проанализируем, что собой представляет процесс бурения скважин в Минском регионе, и какие плюсы это дает.

    Шаги для бурения скважины

    Создание водяных скважин – это многоступенчатый процесс, которая состоит из несколько основных шагов:

    1. Предварительное обследование участка
    Сначала необходимо изучить особенности участка, чтобы найти подходящее место для бурения. Необходимо учесть характеристики почвы, глубину залегания воды и возможные загрязнители.

    2. Проектирование
    На основе данных исследований создается проект, который учитывает подбор глубины, выбор оборудования и материалов.

    3. Бурение и монтаж
    Бурение происходит с использованием специального оборудования. После бурения до требуемой глубины устанавливаются системы фильтрации и водопроводные коммуникации.

    4. Пусконаладочные работы
    В конце проводится тестирование системы и интеграцию с домашней водной системой. Проверяется уровень чистоты воды и производительность.

    Плюсы бурения скважин

    Создание скважины для воды в регионе отличается рядом плюсов по сравнению с альтернативными методами подачи воды:

    • Безопасная для питья вода
    Скважина обеспечивает доступ к подземным водам, которые не загрязняются сверху. Это гарантирует высокое качество воды.

    • Независимость от центрального водопровода
    Свобода от водоснабжения из центральных систем. Это актуально для удаленных домов, где нет централизованного водопровода.

    • Длительный срок службы и надежность
    Профессионально установленная скважина прослужит многие годы, обеспечивая надежное водоснабжение в любое время года.

    Критерии выбора бурильной компании

    Выбирая компанию для бурения, обратите внимание на несколько основных критериев:

    • Профессионализм фирмы
    Надежные компании, которые давно работают на рынке обладают знаниями и навыками для выполнения любых задач.

    • Качество работ
    Убедитесь, что компания предоставляет гарантии.

    • Портфолио и отзывы клиентов
    Изучите примеры выполненных проектов и обратите внимание на отзывы других клиентов. Это даст представление об уровне сервиса.

    Бурение скважины на воду в Минске и Минской области – это проверенный способ обеспечить чистую воду для обеспечения чистой воды на загородных участках.

发表评论

电子邮件地址不会被公开。 必填项已用*标注