日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

框架 go_go异步任务框架machinery,嗖嗖的[视频]

發(fā)布時(shí)間:2024/9/19 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 框架 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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。