İşleri Zarifçe Durdurma
İşleri düzgün şekilde durdurun
İşleri Zarifçe Durdurma, CoddyKit'te ücretsiz bir Go Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Go Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Go Academy kursu toplamda 4 dersten oluşur.
İşleri Düzgün Biçimde Durdurma
İşin ortasında sonlandırılan bir zamanlama sistemi verileri bozabilir veya yarım kalmış işler bırakabilir. Düzgün kapatma şu anlama gelir: yeni çalışmaları kabul etmeyi bırakmak, devam eden işlerin bir son tarihe kadar tamamlanmasına izin vermek ve ardından çıkmak.
Sinyalleri Dinleme
Kasıtlı olarak kapanabilmek için SIGINT (Ctrl+C) ve SIGTERM (düzenleyicinin durdurma sinyali) gibi OS sinyallerini yakalayın.
sig := make(chan os.Signal, 1)
signal.Notify(sig, syscall.SIGINT, syscall.SIGTERM)
<-sig
fmt.Println("shutting down")signal.NotifyContext
Go 1.16 ve sonraki sürümler, bir sinyal geldiğinde bir bağlamı iptal eden düzenli bir yardımcı işlev sunar.
ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt)
defer stop()
<-ctx.Done()Zamanlama Sistemini Durdurma
robfig/cron ile c.Stop(), çalışan tüm işler tamamlandığında sonlanan bir bağlam döndürür. İşlerin boşalmasını beklemek için bu bağlamı bekleyin.
ctx := c.Stop() // stops scheduling, returns ctx
<-ctx.Done() // wait for running jobs
fmt.Println("all jobs finished")İptali İşlere İletme
Uzun süren işlerin kapatma başladığında hızla durabilmesi için her işe bir bağlam iletin.
func job(ctx context.Context) {
select {
case <-time.After(time.Hour):
case <-ctx.Done():
return // bail out early
}
}Bekleme Süresini Sınırlandırma
Takılı kalan işler için sonsuza kadar beklemeyin. Bir iş kilitlense bile kapatmanın tamamlanması için zaman aşımı olan bir bağlam kullanın.
shutCtx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()Özel Zamanlama Sistemleri için WaitGroups
Gorutinlerle kendi zamanlama sisteminizi kurarsanız, bunları bir sync.WaitGroup ile izleyin ve kapatma sırasında Wait() çağırın.
var wg sync.WaitGroup
wg.Add(1)
go func() { defer wg.Done(); doWork() }()
// shutdown:
wg.Wait()Yeni İş Başlatmaktan Kaçınma
Kapatma başladıktan sonra tikleyici/cron çalışmaları tetiklemeyi bırakmalıdır. Bir done kanalını kapatmak veya bağlamı iptal etmek, döngünün sinyali görmesini ve yeni çalışmalar zamanlamayı bırakmasını sağlar.
Yeniden Çalıştırılabilirlik Önemlidir
İşleri yeniden çalıştırıldıklarında güvenli olacak şekilde tasarlayın. Bir iş ortasında sonlandırılır ve yeniden başlatıldıktan sonra tekrar denenirse, aynı etkiyi oluşturan mantık yinelenen etkileri önler (iki kez e-posta gönderme, iki kez ücret çekme).
Eksiksiz Yaklaşım
Her şeyi bir araya getirelim: sinyalle bildirim gönderen bir bağlam, çalışan işleri boşaltmak için bir bağlam döndüren cron Stop işlemi ve sınırlandırılmış bir zaman aşımı. Bu, zamanlanmış hizmetler için standart düzgün kapatma iskeletidir.
Çalıştırılabilir: Bağlamla Düzgün Durdurma
Bu kendi başına çalışabilen program, düzenli çalışan bir işçiyi yürütür ve bağlam iptali aracılığıyla, devam eden tikin tamamlanmasını bekleyerek düzgün biçimde durdurur.
package main
import (
"context"
"fmt"
"sync"
"time"
)
func main() {
ctx, cancel := context.WithCancel(context.Background())
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
t := time.NewTicker(5 * time.Millisecond)
defer t.Stop()
for {
select {
case <-t.C:
fmt.Println("working")
case <-ctx.Done():
fmt.Println("stopping cleanly")
return
}
}
}()
time.Sleep(17 * time.Millisecond)
cancel() // signal shutdown
wg.Wait() // wait for worker to finish
fmt.Println("shutdown complete")
}Kısa Sınama
İşlerin düzgün biçimde kapatılması hakkındaki anlayışınızı sınayın.
Özet
İşlerin düzgün biçimde kapatılmasını öğrendiniz:
- İdeal olarak
signal.NotifyContextaracılığıyla SIGINT/SIGTERM sinyallerini yakalayın cron.Stop(), çalışan işleri boşaltan bir bağlam döndürür- Bağlamı işlere iletin ve beklemeyi bir zaman aşımıyla sınırlandırın
- Yeniden denemelerin güvenli olması için işleri yeniden çalıştırıldıklarında aynı sonucu verecek şekilde tasarlayın
Yapay zeka eğitmeniyle Go öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 51
- Dersler
- 203
Sıkça Sorulan Sorular
“İşleri Zarifçe Durdurma” dersi ücretsiz mi?
Evet — “İşleri Zarifçe Durdurma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Go Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Go Academy kursu toplamda 4 dersten oluşur.
“İşleri Zarifçe Durdurma” dersinde ne öğreneceğim?
İşleri düzgün şekilde durdurun Go Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Go Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Go Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“İşleri Zarifçe Durdurma” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Go Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Go Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Zamana Dayalı Zamanlama
- robfig/cron Kütüphanesi
- Aralıklar için Tiklayıcılar
- İşleri Zarifçe Durdurma