linux go守护进程,go的select:实现go常驻进程(守护进程)

今天写了个爬虫程序,想让其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!")

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值