今天写了个爬虫程序,想让其10分钟爬一次,找了很多方案:
一、用计划任务crontab,设定10分钟执行一次,方便简单,但计划任务不会将爬虫程序执行的时间计划进去,弃之。
二、各种第三方守护进程程序,感觉还是太麻烦。
for {
select {
case
//todo
}
}
下面学习一下select使用:
参考:
关键性理解:
select 就是监听 IO 操作,当 IO 操作发生时,触发相应的动作(每个case即是监听一个信道,注意是IO,也就是写入和读出信道都会返回true),否则就堵塞当前程序等待IO操作。select会尝试执行各个case, 如果都可以执行,那么随机选一个执行。
两个例子加深理解:
//计时器
package main
import (
"fmt"
"time"
)
func timer(duration time.Duration) chan bool {
ch := make(chan bool)
go func() {
time.Sleep(duration)
ch
}()
return ch
}
func main() {
timeout := timer(time.Second) // 定时1s
for {
select {
case
fmt.Println("already 1s!") // 到时间
return //结束程序
}
}
}
//超时退出
timeout := make (chan bool, 1)
go func() {
time.Sleep(1e9) // sleep one second
timeout
}()
ch := make (chan int)select {case
fmt.Println("timeout!")
}