框架 go_go异步任务框架machinery,嗖嗖的[视频]
生活随笔
收集整理的這篇文章主要介紹了
框架 go_go异步任务框架machinery,嗖嗖的[视频]
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
hi,這次介紹一個(gè) go 的異步任務(wù)框架 machinery。 和 Python 生態(tài)里的 celery 類似。視頻里演示了它的簡(jiǎn)單使用。當(dāng)我們有一些cpu密集計(jì)算任務(wù),延遲任務(wù)等, 可以使用異步任務(wù)框架提交到別的進(jìn)程來(lái)完成。
go異步任務(wù)框架machineryhttps://www.zhihu.com/video/1159110182419099648示例代碼的目錄結(jié)構(gòu)如下:
. ├── main.go ├── sendtask.go └── worker├── tasks.go└── worker.go// main.go 啟動(dòng) worker package mainimport "test/machinerydemo/worker"func main() {// 啟動(dòng)異步任務(wù)框架taskWorker := worker.NewAsyncTaskWorker(0)taskWorker.Launch() }//sendtask.go, 測(cè)試發(fā)送任務(wù) package mainimport ("context""test/machinerydemo/worker" )func main() {worker.SendHelloWorldTask(context.Background()) }// worker/tasks.go 用來(lái)定義任務(wù)函數(shù) package workerimport ("context""fmt""github.com/RichardKnop/machinery/v1/tasks" )var (asyncTaskMap map[string]interface{} )// 方法名 const (HelloWorldTaskName = "HelloWorldTask"DeleteAppShareImageTaskName = "DeleteAppShareImageTask" )// HelloWorld 測(cè)試異步任務(wù) func HelloWorld() error {fmt.Println("Hello World!")return nil }// SendHelloWorldTask 調(diào)用點(diǎn)調(diào)用此異步任務(wù)函數(shù) 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 用來(lái)定義后臺(tái) 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 }總結(jié)
以上是生活随笔為你收集整理的框架 go_go异步任务框架machinery,嗖嗖的[视频]的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为折叠屏通信实验室首次开放 Mate
- 下一篇: 信息通信建设工程预算定额_通信建设工程概