【问题标题】:Call Python tasks from Golang从 Golang 调用 Python 任务
【发布时间】:2017-09-02 01:08:36
【问题描述】:

我一直在构建用于股市分析的大数据应用程序。每天大约 5TB 的记录。我使用 Golang 在 Cassandra/MySQL 中进行数据转换/计算和保存。但是 Python 有很好的数据分析库 Pandas、Spark 等,但是多核处理没有简单的方法,需要很多时间。

所以,我想在 Golang 中同时调用 python 数据分析任务。一种方法是直接执行命令行任务,但我认为应该有更多可扩展的解决方案。也许有用于 Golang 和 Python 之间通信的库。我想也许我应该创建多个 Python Flask 服务器并给它们分配任务。速度很重要,但我可以牺牲一些来获得简洁的解决方案。有任何想法吗?

【问题讨论】:

    标签: python go concurrency server microservices


    【解决方案1】:

    按照您的建议,将您的应用程序拆分为多个服务器会带来一些取舍。

    从好的方面来说,将其拆分可为您在负载平衡方面提供更大的灵活性。换句话说,如果你的烧瓶服务器负担过重,你总是可以再旋转一些,并使用负载均衡器进行水平扩展。当然,这假设您在这些烧瓶服务器上所做的任何事情都可以并行完成(取决于您的实际业务逻辑)。

    它还提供高可用性:您消除了一个潜在的单点故障。

    但是,这种“微服务”方法确实会产生一些开销

    • 要编写更多代码,因为现在您要编写 2 种服务器
    • 一些网络开销,因为现在您通过网络而不是函数调用进行通信。
    • 更多机器可以旋转(尽管您可以在容器中运行所有内容,并且它们都可以在同一台机器上,如果您不需要额外的处理能力)

    您可以考虑使用google-protobuff 序列化/反序列化消息。它与语言无关,并节省了一些网络开销。它不像发送 json 那样容易,但如果效率是最重要的,那么它可能是值得的。此外,它在 python 和 go 中都受支持。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多