goworker

Go后台任务调度
授权协议 MIT
开发语言 Google Go
所属分类 程序开发、 作业/任务调度
软件类型 开源软件
地区 不详
投 递 者 翟迪
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

goworker 是一个Resque兼容的, 基于Go语言的后台任务. 号称比Ruby写的后台任务有10 到 100,000 倍的性能提升

一个简单的作业:

package main

import (
    "fmt"
    "github.com/benmanns/goworker"
)

func myFunc(queue string, args ...interface{}) error {
    fmt.Printf("From %s, %v\n", queue, args)
    return nil
}

func init() {
    goworker.Register("MyClass", myFunc)
}

func main() {
    if err := goworker.Work(); err != nil {
        fmt.Println("Error:", err)
    }
}
  • 之前工作中有项目用到goroutine池,抽空封装了下。 package pool import ( "fmt" "sync" "sync/atomic" "time" ) type Pool struct { mu *sync.Mutex tasks chan ITask workerNum int workers []*worker fr

  • 一 目标 go启动多个协程,每个协程做一个任务,实现并行做任务。 二 code示例 1. 简单go知识介绍 go的并发通过goroutine来处理; func(){}()是go里的匿名函数,{}后面的()是传参数的。如func(a int){…}(100),传了个参数值100; go func(){}开启1个子协程; for+ go func开启多个子协程; go的sync.WaitGroup控制

  • 前言         我们使用Go语言开发项目,常常会使用到goroutine;goroutine太多会造成系统占用过高或其他系统异常,我们可以将goroutine控制指定数量,且减少goroutine的创建,这就运用到Go工作池,下面就介绍和使用一下。 一、概念         我们可以将工作池理解为线程池。线程池的创建和销毁非常消耗资源,所以专门写一个pool,每次用过的线程池再放回pool中

  • Worker Pools package main import "fmt" import "time" // 使用goroutine 开启大小为3的线程池 // 其中1个channel为执行做通信,1个对结果进行保存 // 创建的worker func worker(id int, jobs <-chan int, results chan<- int) { for j := ran

  • 工作池是一种常用的并发设计模式,它利用一组固定数量的 goroutine 来处理一组任务。任务可以被异步地添加到工作池中,等待可用的 worker goroutine 来处理。当没有更多的任务需要处理时,worker goroutine 将会保持空闲状态,等待新的任务到来。 在 Go 中,我们可以使用通道和 Goroutine 来实现这种模式。下面是一个基本的工作池示例: package main

  • golang中经常会用到常驻后台类的worker,实现例如消费队列、定期执行任务、定期统计数据等功能。 这里自己实现了通用的worker模板,主要有以下功能: panic自动重启,最大重启次数可自定义。 optional参数,有默认参数和支持自定义参数。 busy模式和idle模式,执行完任务后睡眠不同的时间。 支持以一定的频率执行,例如每5分钟执行一次任务。 可动态的通过channel控制任务的

  • 解决golang go get gitlab私有仓库的问题(1.13) 1. 问题描述 require ( git.xxxxxxx.com/middle/user v0.0.1 ) go mod tidy 导入包失败 go get git.xxxxxxx.com/middle/user 失败 go build 有CHECKSUM过程,无法编译 2. 现象分析 go get 不支持代码支持之外

  • package main   import (     "fmt"     // "time" ) func worker(id int, jobs <-chan int, results chan<- int) {     for j := range jobs {         fmt.Println("worker", "processing job", j)         // tim

  • 2023-02-15 Add(delta int) :添加任务数 Wait():阻塞等待所有任务的完成 Done():完成任务 import ( "fmt" "sync" "time" ) func worker(wg *sync.WaitGroup) { doSomething() wg.Done() // 2.1、完成任务 } func main() {

 相关资料
  • 说明 在后台任务中,因为是运行在task进程,所以无法使用协程和协程客户端。如果你要操作数据库或Redis,一定要配置同步的连接池。 配置 项目配置文件中mainServer.configs.task_worker_num一定要配置为大于0,否则无法使用后台任务。 定义任务执行类 <?php namespace Test; use Imi\Task\TaskParam; use Imi\Task

  • 问题内容: 我想知道哪种方法是在Java中实现某种后台任务的最有效方法(我想那将是某种非阻塞线程)。更准确地说- 我有一些Java代码,然后在某个时候需要执行长时间运行的操作。我想做的是在后台执行该操作,以便程序的其余部分可以继续执行,并且当该任务完成时,只需更新一些特定的对象即可。然后,其他组件将检测到此更改。 问题答案: 您应该使用线程池, http://java.sun.com/docs/b

  • 问题内容: 如何杀死linux中最后一个生成的后台任务? 例: 问题答案: bash中有一个特殊的变量: $!扩展为在后台执行的最后一个进程的PID。

  • 问题内容: 我尝试定期在JavaFX应用程序后台线程中运行,这会修改一些GUI属性。 我想我知道如何使用Task和Service类,并且不知道如何在不使用Thread#sleep()方法的情况下运行此类定期任务。这将是很好,如果我可以使用一些Executor从Executors编造的方法) 我尝试Runnable每5秒运行一次,这会重新启动,javafx.concurrent.Service但立即

  • 这仍然只在前景工作。 我在这里漏掉了什么?

  • 问题内容: 我有一个Symfony任务,该任务生成一些文件,将exec调用到jar中,然后解析输出。jar从命令行运行良好,任务从命令行运行良好。 问题: 我在基于表单提交的操作中调用任务。我有行动在后台启动一个新的php进程来运行任务,而不管它现在生成的页面是什么。 到java调用时,说exec(java -version); 它输出以下内容: 我感觉这与启动任务时调用php的方式有关,但是我迷

  • 我尝试定期在JavaFX应用程序后台线程中运行,这修改了一些GUI属性。 我想我知道如何使用和类从和不能弄清楚如何运行这样的周期性任务不使用方法。这将是很好的,如果我可以使用一些从编造方法() 我试图每5秒运行,这会重新启动,但它会立即挂起,因为甚至被调用... 最后我使用执行器。newSingleThreadScheduledExecutor(),它每5秒启动一次my,并使用以下命令运行另一个: