第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

在單個(gè) gofiber 進(jìn)程中運(yùn)行后臺任務(wù)

在單個(gè) gofiber 進(jìn)程中運(yùn)行后臺任務(wù)

Go
蝴蝶刀刀 2023-03-07 13:55:05
我有一個(gè)cleanUp刪除過時(shí)文件的后臺任務(wù) ( )。func main() {    // 4 procs/childs max    runtime.GOMAXPROCS(4)    // start a cleanup cron-job    go cleanUp()    app := fiber.New(fiber.Config{        Prefork:   true,    })    app.Post("/", handleFileupload)    log.Fatal(app.Listen(":4000"))}func cleanUp() {    fmt.Println("Cleaning Up..")    for {        // deletes old files here        time.Sleep(60 * time.Second)    }}目前cleanUp在所有 4 個(gè)進(jìn)程上運(yùn)行并打印Cleaning Up..4 次。但我希望它只在單個(gè)進(jìn)程上運(yùn)行并打印單個(gè)Cleaning Up... 我已經(jīng)嘗試過 waitGroups 和 channels 但未能實(shí)現(xiàn)我想要的。我怎樣才能只在單個(gè)進(jìn)程上運(yùn)行它以避免競爭條件?這是輸出:Cleaning Up.. ┌───────────────────────────────────────────────────┐  ┌───────────────────────────────────────────────────┐ │                   Fiber v2.38.1                   │  │ Child PIDs ... 79378, 79379, 79380, 79381         │ │               http://127.0.0.1:4000               │  └───────────────────────────────────────────────────┘ │       (bound on host 0.0.0.0 and port 4000)       │  │                                                   │  │ Handlers ............. 5  Processes ........... 4 │  │ Prefork ........ Enabled  PID ............. 79377 │  └───────────────────────────────────────────────────┘ Cleaning Up..Cleaning Up..Cleaning Up..Cleaning Up..
查看完整描述

1 回答

?
千萬里不及你

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超9個(gè)贊

Fiber 生成多個(gè)進(jìn)程來處理傳入的請求。您需要的是在主進(jìn)程中啟動清理例程并在子進(jìn)程中跳過它。

纖維提供fiber.IsChild功能:

    // start a cleanup cron-job
    if !fiber.IsChild() { 
           go cleanUp()
    }

我稍微修改了您的示例以在處理程序和清理 goroutine 中打印進(jìn)程 ID:

func main() {

    // 4 procs/childs max

    runtime.GOMAXPROCS(4)


    // start a cleanup cron-job

    if !fiber.IsChild() {

        go cleanUp()

    }


    app := fiber.New(fiber.Config{

        Prefork: true,

    })

    app.Post("/", handleFileupload)

    log.Fatal(app.Listen(":4000"))

}


func cleanUp() {

    fmt.Println("Cleaning Up.. Pid:", syscall.Getpid())

    for {

        // deletes old files here

        time.Sleep(1 * time.Second)

        fmt.Println("Cleaning Up.. Pid:", syscall.Getpid())

    }

}


func handleFileupload(ctx *fiber.Ctx) error {

    println("Upload: pid ", syscall.Getpid())

    return nil

}

結(jié)果:


Cleaning Up.. Pid: 27035


 ┌───────────────────────────────────────────────────┐  ┌───────────────────────────────────────────────────┐

 │                   Fiber v2.39.0                   │  │ Child PIDs ... 27041, 27042, 27044, 27045         │

 │               http://127.0.0.1:4000               │  └───────────────────────────────────────────────────┘

 │       (bound on host 0.0.0.0 and port 4000)       │ 

 │                                                   │ 

 │ Handlers ............. 1  Processes ........... 4 │ 

 │ Prefork ........ Enabled  PID ............. 27035 │ 

 └───────────────────────────────────────────────────┘ 


Cleaning Up.. Pid: 27035

Cleaning Up.. Pid: 27035

Cleaning Up.. Pid: 27035

Cleaning Up.. Pid: 27035

Cleaning Up.. Pid: 27035

Cleaning Up.. Pid: 27035

Cleaning Up.. Pid: 27035

如您所見,清理僅在主進(jìn)程中運(yùn)行。


查看完整回答
反對 回復(fù) 2023-03-07
  • 1 回答
  • 0 關(guān)注
  • 130 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號