【问题标题】:channels running in the background and collecting data通道在后台运行并收集数据
【发布时间】:2017-01-23 23:14:19
【问题描述】:

我正在尝试定期在后台运行一些功能,因为我也在提供网络服务。

import ("strings")
func run (cmd string, c chan []byte) {
    parts := strings.Fields(cmd)
    head := parts[0]
    parts = parts[1:len(parts)]

    out, err := exec.Command(head, parts...).Output()
        if err !=nil {
            log.Fatal(err)
        }
    c <-out
}

func main() {
      c:=make(chan []byte)
      go run ("date",c)
      output :=string(<-c)
}

我想每隔几秒在后台运行诸如“date”、“uptime”、“ps”之类的命令 Web 服务 (net/http) 将在前台运行并输出这些函数的结果。

实现这一目标的最佳方法是什么?

【问题讨论】:

  • 要同时运行一些东西,你可以在一个单独的 goroutine 中启动它们——你到底在问什么?
  • 我可以在单独的 go 例程中启动它们。如何运行几个不同的并为在同一进程中运行的 web 服务收集它们的结果?我要求最佳做法

标签: go


【解决方案1】:

您应该首先找到一些库或编写某种实用程序来让您连续运行一项任务,而实际上您的代码并没有这样做。

例如:https://github.com/jasonlvhit/gocron

这只是一个例子,不知道这个lib好不好。

那么你应该选择你的任务和你的网络服务之间的接口。

您可以在一个程序中运行所有内容,并使用通道,每个任务使用一个通道来与 go 例程进行通信。

或者您可以使用您的 go 程序写入的数据以及您的 Web 服务读取和处理的数据编写文本文件。

还有其他几种方法或解决方案,这是我目前能想到的最简单的方法。

希望这会有所帮助。

【讨论】:

  • 这很有帮助。我正在尝试为此类问题找到一些设计模式。希望尽可能保持紧凑。想要避开数据库和中间文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-06
  • 2015-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-18
相关资源
最近更新 更多