Rumah >pembangunan bahagian belakang >Golang >Kes (III) - KisFlow-Golang Stream Real- Aplikasi KisFlow dalam Multi-Gorutine

Kes (III) - KisFlow-Golang Stream Real- Aplikasi KisFlow dalam Multi-Gorutine

WBOY
WBOYasal
2024-07-16 07:23:18534semak imbas

Case (III) - KisFlow-Golang Stream Real- Application of KisFlow in Multi-Kes (III) - KisFlow-Golang Stream Real- Aplikasi KisFlow dalam Multi-Gorutine

Github: https://github.com/aceld/kis-flow
Dokumen: https://github.com/acceld/kis-flow/wiki


Bahagian1-Paparan Keseluruhan
Bahagian2.1-Pembinaan Projek / Modul Asas
Bahagian2.2-Pembinaan Projek / Modul Asas
Bahagian3-Strim Data
Bahagian4-Penjadualan Fungsi
Bahagian5-Penyambung
Bahagian6-Konfigurasi Import dan Eksport
Bahagian7-KisFlow Action
Bahagian8-Cache/Params Caching Data dan Parameter Data
Bahagian9-Berbilang Salinan Aliran
Bahagian10-Statistik Metrik Prometheus
Bahagian11-Pendaftaran Adaptif Jenis Parameter FaaS Berdasarkan Refleksi


Kes1-Permulaan Pantas
Kes2-Kendalian Selari Aliran
Kes3-Penggunaan KisFlow dalam Pelbagai Goroutine
Case4-KisFlow dalam Aplikasi Baris Mesej (MQ)


Muat turun Sumber KisFlow

$go get github.com/aceld/kis-flow

Dokumentasi Pembangun KisFlow

Contoh Kod Sumber

https://github.com/acceld/kis-flow-usage/tree/main/6-flow_in_goroutines

Jika anda memerlukan Aliran yang sama untuk dijalankan serentak dalam berbilang Goroutine, anda boleh menggunakan fungsi flow.Fork() untuk mengklonkan tika Aliran dengan memori terpencil tetapi konfigurasi yang sama. Setiap tika Aliran kemudiannya boleh dilaksanakan dalam Goroutine yang berbeza untuk mengira aliran data masing-masing.

Kes (III) - KisFlow-Golang Stream Real- Aplikasi KisFlow dalam Multi-Gorutine

package main

import (
    "context"
    "fmt"
    "github.com/aceld/kis-flow/file"
    "github.com/aceld/kis-flow/kis"
    "sync"
)

func main() {
    ctx := context.Background()
    // Get a WaitGroup
    var wg sync.WaitGroup

    // Load Configuration from file
    if err := file.ConfigImportYaml("conf/"); err != nil {
        panic(err)
    }

    // Get the flow
    flow1 := kis.Pool().GetFlow("CalStuAvgScore")
    if flow1 == nil {
        panic("flow1 is nil")
    }
    // Fork the flow
    flowClone1 := flow1.Fork(ctx)

    // Add to WaitGroup
    wg.Add(2)

    // Run Flow1
    go func() {
        defer wg.Done()
        // Submit a string
        _ = flow1.CommitRow(`{"stu_id":101, "score_1":100, "score_2":90, "score_3":80}`)
        // Submit a string
        _ = flow1.CommitRow(`{"stu_id":1001, "score_1":100, "score_2":70, "score_3":60}`)

        // Run the flow
        if err := flow1.Run(ctx); err != nil {
            fmt.Println("err: ", err)
        }
    }()

    // Run FlowClone1
    go func() {
        defer wg.Done()
        // Submit a string
        _ = flowClone1.CommitRow(`{"stu_id":201, "score_1":100, "score_2":90, "score_3":80}`)
        // Submit a string
        _ = flowClone1.CommitRow(`{"stu_id":2001, "score_1":100, "score_2":70, "score_3":60}`)

        if err := flowClone1.Run(ctx); err != nil {
            fmt.Println("err: ", err)
        }
    }()

    // Wait for Kes (III) - KisFlow-Golang Stream Real- Aplikasi KisFlow dalam Multi-Gorutine to finish
    wg.Wait()

    fmt.Println("All flows completed.")

    return
}

func init() {
    // Register functions
    kis.Pool().FaaS("VerifyStu", VerifyStu)
    kis.Pool().FaaS("AvgStuScore", AvgStuScore)
    kis.Pool().FaaS("PrintStuAvgScore", PrintStuAvgScore)
}

Dalam coretan kod ini, kami memulakan dua Goroutine untuk menjalankan Flow1 dan klonnya (FlowClone1) secara serentak untuk mengira purata markah akhir untuk pelajar 101, 1001, 201 dan 2001.


Pengarang: Acold
GitHub: https://github.com/aceld

Alamat Projek Sumber Terbuka KisFlow: https://github.com/aceld/kis-flow

Dokumen: https://github.com/acceld/kis-flow/wiki


Bahagian1-Paparan Keseluruhan
Bahagian2.1-Pembinaan Projek / Modul Asas
Bahagian2.2-Pembinaan Projek / Modul Asas
Bahagian3-Strim Data
Bahagian4-Penjadualan Fungsi
Bahagian5-Penyambung
Bahagian6-Konfigurasi Import dan Eksport
Bahagian7-KisFlow Action
Bahagian8-Cache/Params Caching Data dan Parameter Data
Bahagian9-Berbilang Salinan Aliran
Bahagian10-Statistik Metrik Prometheus
Bahagian11-Pendaftaran Adaptif Jenis Parameter FaaS Berdasarkan Refleksi


Kes1-Permulaan Pantas
Kes2-Kendalian Selari Aliran
Kes3-Penggunaan KisFlow dalam Pelbagai Goroutine
Case4-KisFlow dalam Aplikasi Baris Mesej (MQ)

Atas ialah kandungan terperinci Kes (III) - KisFlow-Golang Stream Real- Aplikasi KisFlow dalam Multi-Gorutine. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn