go语言实现一个定时下载任务

提示:go语言实现一个定时下载任务,多线程。

它通过一个无限循环,在每次循环中等待到下一整半点,然后创建一个新的定时器和一个新的 goroutine 来执行下载任务。下载任务会在每天的整点开始,每 15 分钟下载一次,共循环 4 次。

func (api *main) scheduleDownload() {
	start := false //初始化一个名为start的变量为false,用于标记下载任务的开始状态。
	// 定时器逻辑
	for {//启动一个无限循环,使下载任务能够持续执行。
		now := time.Now() //获取当前的本地时间。
		nextHalfHour := now.Truncate(time.Hour).Add(30 * time.Minute) //计算下一个半小时的时间。
		//fmt.Printf("下一个半小时: %v\n", nextHalfHour)
		waitTime := nextHalfHour.Sub(now)
		//fmt.Println("等待时间: ", waitTime)
		time.Sleep(waitTime)
		// 时间到了之后的执行的操作
		log.Println("开始下载...")//当等待到下一整半点时,打印一条日志信息。
		// 创建一个 ticker,每 30 分钟触发一次
		ticker := time.NewTicker(30 * time.Minute)//创建一个新的定时器对象ticker,设置间隔时间为 30 分钟。
		//fmt.Println("定时器创建成功")
		// 启动一个新的 goroutine 来等待并执行下载任务
		func() { //创建了一个匿名函数,并立即在一个新的goroutine里启动它。这个函数包含下载任务的逻辑。
			defer ticker.Stop() //确保在执行完任务后,定时器资源能被正确地清理。
			// 等待定时器触发
			<-ticker.C //使用通道C接收time.Ticker的触发信号,本质是阻塞等待,直到定时器时间到了。
			// 时间到了之后的执行的操作
			log.Println("开始下载1...")
			// 开始下载任务
			if start { //检查start标志,如果为true,则开始下载任务。
				now := time.Now().Truncate(24 * time.Hour)
				//fmt.Println("当前时间:", now)
				// 整点时间
				hourStart := now.Truncate(time.Hour)
				//fmt.Println("整点时间:", hourStart)
				// 循环两次
				for i := 0; i < 4; i++ {
					// 计算每个时间间隔的时间字符串
					timeString := hourStart.Add(time.Minute * time.Duration(15*i)).Format("20060102150400000")
					//fmt.Println("timeString: ", timeString)
					//log.Println("开始下载2: ", timeString)
					// 调用下载函数
					downloadImage(timeString + ".jpg") //根据计算得到的时间字符串拼接成文件名,然后调用实际下载自己需要的函数。
				}
			}
		}()
		start = true
	}
}

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值