我正在解決一個問題,我有一組“熱情的工人”。這意味著它們被維護在內存中,維護自己的上下文并且是可調用的。我一直在研究各種 Go Worker 實現,但都依賴于閉包或返回結果的簡單計算函數。我找到了一個工作人員的示例,它可以讓我啟動上下文并根據最大隊列和最大例程限制將任務分配給它們: https: //github.com/cahitbeyaz/job-worker/blob/master/main.go #L131然而,這種模式不允許我從上下文返回結果并將其反饋回來。我還使用 Web 服務器,因此 Web 處理程序必須接收結果并做出相應響應。是否有我應該/可以遵循的特定/更好的模式,或者我可以適應工作人員示例的方法?附言。起初我以為我可以創建一個 ResultQueue,其中結果被推回并由 Web 處理程序使用。不過,我認為隊列的順序不可靠。
1 回答

紅顏莎娜
TA貢獻1842條經驗 獲得超13個贊
解決方案非常簡單(我確實把它復雜化了)。不確定這實際上有多有效,但懷疑它并不太糟糕。仍然歡迎提出更好模式的建議:
在作業定義中聲明一個通道來反饋結果:
type Job struct {
Request string
Params []string
Result chan Result
}
在你的工作進程中,而不是僅僅返回返回值,而是通過通道傳遞結果結構:
job.Result <- Result{
Response: result.String(),
Headers: []string{},
}
現在,在 Web 處理程序中,只需等待通道即可:
disatcher.jobQueue <- job
result := <- job.Result
愚蠢的我。不知道為什么要花2個小時的努力。:-p 經驗教訓:Go 并發性非常強大。只是別想太多。
- 1 回答
- 0 關注
- 149 瀏覽
添加回答
舉報
0/150
提交
取消