Go Machinery

Go 异步任务队列
授权协议 BSD
开发语言 Google Go
所属分类 程序开发、 并发/并行处理框架
软件类型 开源软件
地区 不详
投 递 者 连鸿
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

Machinery 是一个 Go 语言的异步任务队列和作业队列,基于分布式消息传递。类似 Python 的 Celery 框架。

Machinery 中的任务(或者作业)可通过多个 worker 在很多服务器上并发的执行,或者可在单个服务器上利用 Go 的协程运行多个 worker 进程。

Example worker receives tasks

任务的定义:

type AddTask struct{}

func (t AddTask) Run(args []interface{}) (interface{}, error) {
    parsedArgs, err := machinery.ParseNumberArgs(args)
    if err != nil {
        return nil, err
    }

    add := func(args []float64) float64 {
        sum := 0.0
        for _, arg := range args {
            sum += arg
        }
        return sum
    }

    return add(parsedArgs), nil
}

type MultiplyTask struct{}

func (t MultiplyTask) Run(args []interface{}) (interface{}, error) {
    parsedArgs, err := machinery.ParseNumberArgs(args)
    if err != nil {
        return nil, err
    }

    multiply := func(args []float64) float64 {
        sum := 1.0
        for _, arg := range args {
            sum *= arg
        }
        return sum
    }

    return multiply(parsedArgs), nil
}

// ... more tasks

任务注册:

tasks := map[string]machinery.Task{
    "add":      AddTask{},
    "multiply": MultiplyTask{},
}
app.RegisterTasks(tasks)


  • 导语 在Golang任务队列machinery使用与源码剖析(一)_戴国进的博客-CSDN博客一文中,我们主要对golang中任务队列machinery的设计结构以及具体模块的功能与源码实现进行了详细介绍。在了解了基本工作原理之后,本篇系列之二我们将从使用的角度,同时结合源码继续对machinery进一步介绍。 配置方案 为了掌握如何使用machinery,本文将会同时从调用代码和machiner

  • 导语 异步任务,是每一位开发者都遇到过的技术名词,在任何一个稍微复杂的后台系统中,异步任务总是无法避免的,而任务队列由于其松耦合、易扩展的特性,成为了实现异步任务的可靠保证。 背景 当用户的一次请求事件发生,可能是某种数据的重复数查询,抑或是某批人群的覆盖率统计,展现到用户的是几行数字,但在透视到后端逻辑中,简单的这可能是一次mysql的联表查询或者elasticsearch的聚合,但更多情况下,

  • 因为业务需要用到异步任务队列,在python里面可以用celery了,在异步任务方面很方便,可是go里面没有celery,找了一圈发现machinery符合预期。官方github。在网上想找一点可以参考的demo或者分享的文章很少,所以自己就研究了一下,分享一下。用过celery就知道celery也有worker,这里machinery也一样的有worker,还有send。顾名思义一个是往队列加任

  • 原文:https://cloud.tencent.com/developer/article/1169675 目的 当后端要处理复杂的数据交互或者耗时的逻辑计算发生多次数据交互任务的情况一旦存在,为了实现每一次任务的可靠执行以及前端响应速度,任务队列的出现可以较好的解决这些问题。 场景与功能 场景 大批量的计算任务。如大量数据插入,通过拆分并分批插入任务队列,从而实现串行链式任务处理 或者实现分组

  • 1. 条件语句 if ... else if ... else...  package main import "fmt" func main() { var a int = 30 if a < 20 { fmt.Printf("a小于20\n") } else if a > 20 { fmt.Printf("a大于20\n")

  • xmachinery 项目地址 gitee.com/sqxwww/xmachinery 介绍 xmachinery 是github.com/RichardKnop/machinery 的扩展包,添加定时任务管理API,扩展支持广播任务 核心代码 定时任务管理 func (server *XServer) registerScheduledTask(task ScheduledTask) error

  • 描述 go实现的基于消息中间件的异步任务队列, 下面是学习笔记 使用概述 步骤1: 创建server,配置参数、注册task。(此处server只是个配置作用, 并不是单独的server进程) 步骤2: 启动worker 步骤3: 发送task 与celery的用法是完全一致的 创建server func startServer() (*machinery.Server, error) { c

 相关资料
  • 编辑:Redis+Sidekiq完成该工作。在这里,Redis作为一个消息队列工作,Sidekiq在后台处理这些消息。我很想知道,选择一个显式代理(如RabbitMQ、SQS、Redis PubSub)而不是Redis+SideKiQ有什么用例和好处?

  • 主要内容:本节引言:,1.相关概念,2.AsyncTask全解析:,3.AsyncTask使用示例:,本节小结:本节引言: 本节给大家带来的是Android给我们提供的一个轻量级的用于处理异步任务的类:AsyncTask,我们一般是 继承AsyncTask,然后在类中实现异步操作,然后将异步执行的进度,反馈给UI主线程~ 好吧,可能有些概念大家不懂,觉得还是有必要讲解下多线程的概念,那就先解释下一些概念性的东西吧! 1.相关概念 1)什么是多线程: 答:先要了解这几个名称:应用程序,进程,线程,

  • 这可能是一个更巧妙的问题,但我在ViewComponent类中有以下方法 所以我的问题是我应该采取什么方法?让异步在那里与警告无关,还是有一个解决方案/修复这个警告?它对我的项目有那么大的影响吗? 谢了!

  • 8.2 使用异步任务 注意:本节所介绍的功能要求 vim 编译包括 +job 特性。 8.2.1 简单任务体验 前文说到,Vim 的异步任务主要是针对外部命令的。那我们就先以最简单最常见的系统命 令 ls 为例,其功能是列出当前目录下的文件,若在 Windows 操作系统下或可用 dir 命令代替。 首先请在 shell 中进入一个非空目录,便于实践,并在 shell 中执行如下命令: $ ls

  • 问题内容: 我在一个比较大的Web应用程序上工作,后端主要使用PHP。代码中有几个地方需要完成一些任务,但是我不想让用户等待结果。例如,在创建新帐户时,我需要向他们发送欢迎电子邮件。但是,当他们按下“完成注册”按钮时,我不想让他们等到实际发送电子邮件之后,我只想开始该过程,并立即向用户返回一条消息。 到目前为止,在某些地方,我一直在使用exec()感觉像是被黑客入侵。基本上是这样的: 这似乎可行,

  • 这是在一次Android采访中被问到的。有人问我是否可以从异步任务 1 的 doInBackground() 方法(让它成为 Task1)启动另一个异步任务(让它成为 Task2)。我浏览了文档,其中说了以下内容: 必须在UI线程上创建任务实例。 必须在 UI 线程上调用 execute(Params...)。 根据这些陈述,我认为从另一个任务的后台方法启动一个任务是不可能的。此外,async任务

  • 我试图在这个类中实现异步任务,但问题是我在我的程序中调用了函数,该函数返回一个值,我不知道该把它放在哪里。在异步任务中,我应该在哪里定义?我得到以下例外 以下是我的主要课程: 这是我的解析类:公共类解析{ List headlines列出链接;列表描述;列出lstDate列出新日期;//字符串a,b,c,d;public InputStream getInputStream(URL URL){ t

  • 一年前,我在android上做了一些事情,我想知道是否有可能把它转换成java。 来自android的代码: 在给定参数搜索的情况下,搜索SQL数据库是非常困难的。 如有任何答复,将不胜感激。