💬
goのスケジュール処理についての云々。
目下、ラジオを簡単に録音する方向で動いている。定期処理をしたい。
要件としては以下である。
- goがいい
- 定期録音するからキャンセルできるといい
- 動作はラズパイ
まぁ、ググるといい記事がありますね。
なるほど、確かにチャンネル使ってに平行処理が走ればgoのいいことが出るよね。
すいません、面倒くさがりなので影響が出なければそこそこ重くてもいいです。
そっから考えます。だけどラズパイだから全部goroutineするのは頂けないかなという訳でgocronあたりを、、、、
解析
中を見ると、途中キャンセルが出来なさそうだった。エラーで返すなよ!
と頭を抱えていた。
英語だからところどころ読み飛ばすので上から見てみる。
ありがとうございます、勝ちゲーです。現在はここでメンテナンスされているようです。
サンプルの作成
package main
import (
"fmt"
"os"
"os/signal"
"time"
"github.com/go-co-op/gocron"
)
func task() {
fmt.Println("I am running task.")
}
func main() {
s1 := gocron.NewScheduler(time.Local)
j, _ := s1.Every(2).Seconds().Do(task)
s1.StartAsync()
go func() {
time.Sleep(time.Second * 5)
s1.RemoveByReference(j)
fmt.Println("task cancell")
}()
//待機
quit := make(chan os.Signal)
signal.Notify(quit, os.Interrupt)
<-quit
}
2秒毎にメッセージを表示して、5秒後にタスク停止をしようとしてます
ここまでいけばよいでしょう。
あとはやりたい放題です。
Discussion