成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Ticker Or Sleep?定時執(zhí)行的新選擇

開發(fā) 后端
在寫 Python 的時候,如果想讓某個函數(shù)每 60 秒執(zhí)行一次,我們一般以下三種方式寫代碼。這種寫法,初看起來時跟time.Sleep沒什么區(qū)別,但是仔細(xì)一想,卻發(fā)現(xiàn)它有很多優(yōu)勢。

在寫 Python 的時候,如果想讓某個函數(shù)每 60 秒執(zhí)行一次,我們一般這樣寫代碼:

  1. import time 
  2.  
  3. while True: 
  4.     some_function() 
  5.     time.sleep(60) 

[[357695]]

于是,我在寫 Golang 代碼的時候,也使用了這種方式:

  1. package main 
  2.  
  3. import ( 
  4.     "fmt" 
  5.     "time" 
  6.  
  7. func someFunction() { 
  8.     fmt.Println("我是某個函數(shù)") 
  9.  
  10. func main() { 
  11.     for { 
  12.         someFunction() 
  13.         time.Sleep(10 * time.Second) 
  14.     } 

今天在看同事的代碼時,發(fā)現(xiàn)他是這樣寫的:

  1. package main 
  2.  
  3. import ( 
  4.     "fmt" 
  5.     "time" 
  6.  
  7. func someFunction() { 
  8.     fmt.Println("我是某個函數(shù)") 
  9.  
  10. func main() { 
  11.     tikcer :time.NewTicker(10 * time.Second) 
  12.     for { 
  13.         <-tikcer.C 
  14.         someFunction() 
  15.     } 

這種寫法,初看起來時跟time.Sleep沒什么區(qū)別,但是仔細(xì)一想,卻發(fā)現(xiàn)它有很多優(yōu)勢。

首先,NewTicker會在背后計時,時間到了以后,會向內(nèi)部的一個 channel 中推入當(dāng)前的時間。然后繼續(xù)計時。所以,如果函數(shù)someFunction()執(zhí)行了3秒鐘。那么接下來過7秒就會繼續(xù)執(zhí)行。但如果使用time.Sleep,函數(shù)執(zhí)行完成以后,還要再等10秒鐘才會執(zhí)行。

其次,如果不啟動新的協(xié)程,那么當(dāng)執(zhí)行到time.Sleep時,整個程序是卡住的,必須等待它結(jié)束了才能執(zhí)行后面的操作。但如果使用 NewTicker,那么在等待的時間,還可以做很多其他的事情。多個不同的定時器可以同時工作:

  1. package main 
  2.  
  3. import ( 
  4.     "fmt" 
  5.     "time" 
  6.  
  7. func someFunction() { 
  8.     fmt.Println("我是某個函數(shù)") 
  9.  
  10. func anotherFunction() { 
  11.     fmt.Println("另一個函數(shù)") 
  12.  
  13. func thirdFunction() { 
  14.     fmt.Println("第三個函數(shù)") 
  15.  
  16. func main() { 
  17.     tikcer1 :time.NewTicker(10 * time.Second) 
  18.     tikcer2 :time.NewTicker(5 * time.Second) 
  19.     tikcer3 :time.NewTicker(3 * time.Second) 
  20.     for { 
  21.         select { 
  22.         case <-tikcer1.C: 
  23.             someFunction() 
  24.         case <-tikcer2.C: 
  25.             anotherFunction() 
  26.         case <-tikcer3.C: 
  27.             thirdFunction() 
  28.         } 
  29.     } 

這樣可以實(shí)現(xiàn),每3秒執(zhí)行 thirdFunction函數(shù),每5秒執(zhí)行anotherFunction,每10秒執(zhí)行一次someFunction。大家可以考慮一下,如何用 time.Sleep來實(shí)現(xiàn)這樣的功能。

注意每個函數(shù)都是獨(dú)立計時的,只要他們執(zhí)行的時間不超過他們間隔的時間,就不會互相影響。

除了全部用來計時外,我們還可以用來設(shè)置外部開關(guān),中斷一個協(xié)程。例如:

  1. package main 
  2.  
  3. import ( 
  4.     "fmt" 
  5.     "time" 
  6.  
  7. func doSomething() { 
  8.     fmt.Println("進(jìn)行某些操作") 
  9.  
  10. func someFunction(stop chan bool) { 
  11.     fmt.Println("我是某個函數(shù)") 
  12.     tikcer1 :time.NewTicker(10 * time.Second) 
  13.     for { 
  14.         select { 
  15.         case <-tikcer1.C: 
  16.             doSomething() 
  17.         case <-stop: 
  18.             return 
  19.         } 
  20.     } 
  21.  
  22. func main() { 
  23.     stop :make(chan bool) 
  24.     go someFunction(stop) 
  25.     //很多行代碼 
  26.     //很多行代碼 
  27.     //很多行代碼 
  28.     stop <- true 
  29.     //其他代碼 
  30.     //其他代碼 

在協(xié)程里面是一個10秒執(zhí)行一次的定時函數(shù)。但是我們可以在外面控制這個協(xié)程,從而隨時停止這個協(xié)程。

本文轉(zhuǎn)載自微信公眾號「未聞Code」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系未聞Code公眾號。

 

責(zé)任編輯:趙寧寧 來源: 未聞Code
相關(guān)推薦

2009-11-13 09:40:27

linux定時執(zhí)行crontab

2009-12-02 09:17:50

Open Suse

2020-12-22 06:04:13

Python定時代碼

2010-01-07 13:24:22

Linux定時執(zhí)行工具

2023-06-08 08:16:33

TickerPixiJS

2011-05-04 16:30:07

靈客風(fēng)LinkPhon

2024-10-07 08:59:47

sleepwait線程

2010-06-09 15:15:34

MySQL定時執(zhí)行

2012-12-03 09:22:41

KVM服務(wù)器虛擬化

2009-02-07 12:23:45

AmazonSimpleDB數(shù)據(jù)存儲

2016-09-09 00:32:57

數(shù)據(jù)中心軟件定義存儲

2012-03-16 15:28:15

DLP云計算數(shù)據(jù)丟失防御

2010-07-02 09:03:52

SQL server定

2023-12-27 08:30:46

Java語言ArkTS

2011-07-08 16:07:41

Oracle job存儲過程

2009-09-21 09:57:15

linux進(jìn)程cron

2010-06-25 17:42:08

EclipseEclipse 3.6Java

2021-05-27 10:55:18

IEEdge瀏覽器

2009-04-01 09:05:34

Java云計算亞馬遜EC2

2011-05-26 15:52:31

sleep()wait()
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 免费一看一级毛片 | 欧美一级黄色网 | 午夜a v电影 | 99久久日韩精品免费热麻豆美女 | 中文字幕伊人 | 欧美网站一区 | 国产成人精品久久二区二区 | 秋霞a级毛片在线看 | 欧美日韩亚洲在线 | 欧美精品在线一区 | 亚洲国产一区二区三区在线观看 | 91精产国品一二三区 | 成人免费观看视频 | 日韩国产欧美在线观看 | 亚洲综合婷婷 | 精品国产乱码久久久久久中文 | 黄色免费在线观看网站 | 成人在线精品视频 | 久久九精品 | 国产精品亚洲第一区在线暖暖韩国 | 亚洲精品视频久久 | 极品电影院 | 日韩中文一区二区三区 | 日本一区二区三区四区 | 日本高清视频在线播放 | 精品国产一区二区在线 | 成人午夜激情 | 中文在线一区二区 | 久久区二区 | 免费国产一区二区 | 成人二区三区 | 国产女人与拘做受视频 | 成人精品视频99在线观看免费 | 国产视频中文字幕 | 狠狠久 | 亚洲国产网 | 国产日韩欧美在线观看 | 一区在线视频 | 精品国产乱码久久久久久图片 | 国产精品国产a级 | 免费高清av |