框架 go_go异步任务框架machinery,嗖嗖的[视频]
生活随笔
收集整理的這篇文章主要介紹了
框架 go_go异步任务框架machinery,嗖嗖的[视频]
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
hi,這次介紹一個 go 的異步任務框架 machinery。 和 Python 生態里的 celery 類似。視頻里演示了它的簡單使用。當我們有一些cpu密集計算任務,延遲任務等, 可以使用異步任務框架提交到別的進程來完成。
go異步任務框架machineryhttps://www.zhihu.com/video/1159110182419099648示例代碼的目錄結構如下:
. ├── main.go ├── sendtask.go └── worker├── tasks.go└── worker.go// main.go 啟動 worker package mainimport "test/machinerydemo/worker"func main() {// 啟動異步任務框架taskWorker := worker.NewAsyncTaskWorker(0)taskWorker.Launch() }//sendtask.go, 測試發送任務 package mainimport ("context""test/machinerydemo/worker" )func main() {worker.SendHelloWorldTask(context.Background()) }// worker/tasks.go 用來定義任務函數 package workerimport ("context""fmt""github.com/RichardKnop/machinery/v1/tasks" )var (asyncTaskMap map[string]interface{} )// 方法名 const (HelloWorldTaskName = "HelloWorldTask"DeleteAppShareImageTaskName = "DeleteAppShareImageTask" )// HelloWorld 測試異步任務 func HelloWorld() error {fmt.Println("Hello World!")return nil }// SendHelloWorldTask 調用點調用此異步任務函數 func SendHelloWorldTask(ctx context.Context) {args := make([]tasks.Arg, 0)task, _ := tasks.NewSignature(HelloWorldTaskName, args)task.RetryCount = 5AsyncTaskCenter.SendTaskWithContext(ctx, task) }func initAsyncTaskMap() {asyncTaskMap = make(map[string]interface{})asyncTaskMap[HelloWorldTaskName] = HelloWorld }// worker/worker.go 用來定義后臺 worker package workerimport ("github.com/RichardKnop/machinery/v1"mchConf "github.com/RichardKnop/machinery/v1/config""github.com/RichardKnop/machinery/v1/log""github.com/RichardKnop/machinery/v1/tasks" )var (AsyncTaskCenter *machinery.Server )func init() {tc, err := NewTaskCenter()if err != nil {panic(err)}AsyncTaskCenter = tc }func NewTaskCenter() (*machinery.Server, error) {cnf := &mchConf.Config{Broker: "redis://localhost:6379",DefaultQueue: "ServerTasksQueue",ResultBackend: "redis://localhost:6379",}// Create server instanceserver, err := machinery.NewServer(cnf)if err != nil {return nil, err}initAsyncTaskMap()return server, server.RegisterTasks(asyncTaskMap) }func NewAsyncTaskWorker(concurrency int) *machinery.Worker {consumerTag := "TestWorker"// The second argument is a consumer tag// Ideally, each worker should have a unique tag (worker1, worker2 etc)worker := AsyncTaskCenter.NewWorker(consumerTag, concurrency)// Here we inject some custom code for error handling,// start and end of task hooks, useful for metrics for example.errorhandler := func(err error) {log.ERROR.Println("I am an error handler:", err)}pretaskhandler := func(signature *tasks.Signature) {log.INFO.Println("I am a start of task handler for:", signature.Name)}posttaskhandler := func(signature *tasks.Signature) {log.INFO.Println("I am an end of task handler for:", signature.Name)}worker.SetPostTaskHandler(posttaskhandler)worker.SetErrorHandler(errorhandler)worker.SetPreTaskHandler(pretaskhandler)return worker }總結
以上是生活随笔為你收集整理的框架 go_go异步任务框架machinery,嗖嗖的[视频]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为折叠屏通信实验室首次开放 Mate
- 下一篇: 雷军证实小米14销量超百万台 但也遇到华