日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
TickerOrSleep?定時(shí)執(zhí)行的新選擇

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

峨眉山網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。成都創(chuàng)新互聯(lián)公司2013年成立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專(zhuān)注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)。

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

于是,我在寫(xiě) Golang 代碼的時(shí)候,也使用了這種方式:

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

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

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

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

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

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

 
 
 
 
  1. package main 
  2.  
  3. import ( 
  4.     "fmt" 
  5.     "time" 
  6.  
  7. func someFunction() { 
  8.     fmt.Println("我是某個(gè)函數(shù)") 
  9.  
  10. func anotherFunction() { 
  11.     fmt.Println("另一個(gè)函數(shù)") 
  12.  
  13. func thirdFunction() { 
  14.     fmt.Println("第三個(gè)函數(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來(lái)實(shí)現(xiàn)這樣的功能。

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

除了全部用來(lái)計(jì)時(shí)外,我們還可以用來(lái)設(shè)置外部開(kāi)關(guān),中斷一個(gè)協(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("我是某個(gè)函數(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é)程里面是一個(gè)10秒執(zhí)行一次的定時(shí)函數(shù)。但是我們可以在外面控制這個(gè)協(xié)程,從而隨時(shí)停止這個(gè)協(xié)程。

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


本文名稱(chēng):TickerOrSleep?定時(shí)執(zhí)行的新選擇
網(wǎng)站網(wǎng)址:http://www.5511xx.com/article/cdspidg.html