2017-01-23 12 views
0

私はWebサービスも提供しているため、定期的にまたはバックグラウンドでいくつかの機能を実行しようとしています。チャネルがバックグラウンドで実行され、データが収集されています

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) 
} 
私は、このようなウェブサービス(ネット/ HTTP)「日付」、「稼働時間」、「PS」数秒ごとなど、バックグラウンドでコマンドを実行したい結果をoutputingフォアグラウンドで実行されます

これらの機能のうちの1つ。

これを達成する最も良い方法は何ですか?

+0

同時に実行するには、別々のゴルーチンで開始します。ここでは正確に何を求めていますか? – JimB

+0

私は別のゴールーでそれらを始めることができます。同じプロセスで実行されるWebサービスの結果を収集する方法はいくつですか?私はベストプラクティスを求めています – NinjaGaiden

答えて

0

まずlibを見つけたり、実際にコードが実行していないタスクを連続して実行できるようにする何らかのユーティリティを書く必要があります。例えば

:このlibには罰金であるかどうかhttps://github.com/jasonlvhit/gocron

これは一例であり、私は知りません。

次に、タスクとWebサービスの間のインターフェイスを選択する必要があります。

すべてを1つで実行し、チャネルを使用して、タスクごとに1つずつ、ゴールーとコミニュケーションすることができます。

または、あなたのロールンタインが書き込みを行い、Webサービスが読み込んで処理するデータをテキストファイルに書き込むことができます。

他にもいくつかの方法や解決策がありますが、これは私が今考えている最も簡単な方法です。

これが役に立ちます。

+0

これは多くの助けになります。私はこの種の問題のためのデザインパターンを見つけようとしています。できるだけコンパクトに保ちたいですか?データベースと中間ファイルを避けたい – NinjaGaiden

関連する問題