登录
首页 >  Golang >  Go问答

使用 golang 实现的 python 文件中的函数构造 API

来源:stackoverflow

时间:2024-02-08 15:30:21 436浏览 收藏

欢迎各位小伙伴来到golang学习网,相聚于此都是缘哈哈哈!今天我给大家带来《使用 golang 实现的 python 文件中的函数构造 API》,这篇文章主要讲到等等知识,如果你对Golang相关的知识非常感兴趣或者正在自学,都可以关注我,我会持续更新相关文章!当然,有什么建议也欢迎在评论留言提出!一起学习!

问题内容

我正在编写一个将通过 websocket 发送消息的 api。

我有一个 python 监控函数,用于监控和格式化将通过 websocket 发送的数据。如果这个监控函数是用 golang 编写的,我会在一个单独的 goroutine 上运行该函数,每次该函数获取新数据时,我都会通过通道发送它,然后通过 websocket 连接发送它。

如果监控函数是Python函数,如何/是否可以实现类似的行为?我不想使用 grpc,因为速度对我的用例很重要


正确答案


如果您想使用python函数来监视和格式化go程序中的数据,您可以使用任何cpython api的实现(例如cpy3)从go程序中调用python函数。例如,gpython 使用 cpython api 将 python 嵌入 go 中。下面是一个示例,说明如何使用此类 api 来监视 python 函数。

package main

// #cgo CFLAGS: -I/usr/include/python3.8
// #cgo LDFLAGS: -lpython3.8
// #include 
import "C"
import (
    "fmt"
    "unsafe"
)

func main() {
    C.Py_Initialize()
    defer C.Py_Finalize()

    pyName := C.CString("monitor_module")
    defer C.free(unsafe.Pointer(pyName))
    pyModule := C.PyImport_ImportModule(pyName)
    if pyModule == nil {  // handle error  }

    pyFunc := C.PyObject_GetAttrString(pyModule, C.CString("monitor_function"))
    pyArgs := C.PyTuple_New(0)
    pyResult := C.PyObject_CallObject(pyFunc, pyArgs)

    result := C.GoString(C.PyUnicode_AsUTF8(pyResult)) // Python result to a Go string
    fmt.Println(result)
}

好了,本文到此结束,带大家了解了《使用 golang 实现的 python 文件中的函数构造 API》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>