分布式任务队列:cppq

文章目录

  • 简介
  • Features
  • Quickstart
    • Example
    • Web UI
    • 命令行
  • 参考

简介

cppq 是一个简单、可靠、高效的 C++17 分布式任务队列。
cppq 是一个 C++ 库,用于对任务进行排队并与工作线程异步处理它们。它由 Redis 支持,旨在可扩展且易于入门。

cppq 工作原理:

  • 客户端将任务放入队列(队列由redis管理)
  • 服务器从队列中取出任务并为每个任务启动一个线程
  • 任务由多个worker同时处理

任务队列用作跨多台机器分配工作的机制。一个系统可以由多个工作服务器和代理组成,从而实现高可用性和水平扩展。

Features

Suppoeted:

  • 保证任务至少执行一次
  • 重试失败的任务
  • Worker崩溃时自动恢复任务
  • 由于 Redis 中的写入速度很快,因此添加任务的延迟较低
  • 队列优先级
  • 任务安排
  • 任务调度
  • 能够暂停队列以停止处理队列中的任务
  • 用于检查和控制队列和任务的 Web UI
  • 用于检查和控制队列和任务的 CLI

No supported:

  • 周期性任务

Quickstart

cppq 是一个仅包含头文件的库,具有 2 个依赖项:libuuid 和hiredis。

只需包含头文件: 只需包含头文件:#include “cppq.h”,并在构建时添加以下标志 -luuid -lhiredis

wsl2 ubuntu需要安装hiredis和redis:

  • hiredis需要从github中下载,不要使用ubuntu自带的,太老了,编译报错

CMakeLists.txt

cmake_minimum_required(VERSION 3.16)set(CMAKE_CXX_STANDARD 17)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)include_directories(${CMAKE_SOURCE_DIR}/deps/include)
link_directories(${CMAKE_SOURCE_DIR}/deps/lib)project(distributedTasks LANGUAGES CXX)add_executable(${PROJECT_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/example.cpp)target_link_libraries(${PROJECT_NAME}PRIVATE uuidPRIVATE hiredisPRIVATE pthread)target_include_directories(${PROJECT_NAME}PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)

Example

见cvpp的example.cpp

Web UI

cd web && ./start.sh

命令行

cd cli && pip3 install -r requirements && python3 main.py

usage: main.py [-h] [--redis_uri REDIS_URI] [--queues] [--stats QUEUE] [--list QUEUE STATE] [--task QUEUE UUID] [--pause QUEUE] [--unpause QUEUE]cppq CLIoptions:-h, --help            show this help message and exit--redis_uri REDIS_URI--queues              print queues, priorities, and pause status--stats QUEUE         print queue statistics--list QUEUE STATE    list task UUIDs in queue--task QUEUE UUID     get task details--pause QUEUE         pause a queue--unpause QUEUE       unpause a queue

参考

  • cvpp

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/770228.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【QA】MySQL导出某数据库的所有数据为sql文件,包含建库命令、建表命令。

文章目录 前言Windows系统下 | mysqldump导出数据库数据Docker中导入初始化数据【补充】通过命令行,执行sql文件,将数据导入到数据库在MySQL外面执行在MySQL中执行 前言 我们在用docker部署mysql项目的时候,往往需要对数据库进行数据初始化。…

ARM 和 龙芯上 Arch Linux 安装手记

背景 今天尝试安装龙芯版 Linux,本来希望能安装 Debian 版,但只找到一些文档,没找到可安装版的 ISO。 后来顺着这篇文章找到了Arch Linux,就尝试安装了一下。 安装后发现竟然不会配置网络 😂。而且龙芯版由于是在 QEMU 虚拟机里,运行速度也较慢。所以,我想我需要先学…

Java-SSM电影在线播放系统

Java-SSM电影在线播放系统 1.服务承诺: 包安装运行,如有需要欢迎联系(VX:yuanchengruanjian)。 2.项目所用框架: 前端:JSP、layui等 后端:SSM,即Spring、SpringMvc、Mybatis等。 3.项目功能点: 3-1.后端功能: - 所有后台管理展…

rk3588内核添加特殊分辨率

rk平台内核本身默认支持一些常规的分辨率,如1920x1080@30,1280x720@60,但是往往不能满足需求,如有的客户需要你添加1020x700@35的分辨率,这时候就要自己加上去了。 下图是LCD各个参数对应的位置: 显示mode 各个参数含义如下: hdisplay:有效显示区水平像素数量,对应A…

Redis入门到实战-第十弹

Redis实战热身Geospatial篇 完整命令参考官网 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://redis.io/Redis概述 Redis是一个开源的(采用BSD许可证),用作数据库、缓存、消息代…

Nginx配置文件中Location指令的匹配优先级

在 Nginx 中,当请求到达服务器时,会根据配置文件中的 location 指令来确定如何处理这个请求。location 指令有不同的匹配优先级,如下文所述。 location匹配优先级 精确匹配(location /path):精确匹配优先…

C#手动改变自制窗体的大小

目录 1.Cursor类的Position属性 2.改变窗体大小的计算方法 3.Resources设计 (1)Resources资源图片管理 (2)GetObject方法设计 4.示例 当用户去除Winform窗体边框,自行设置窗体外观时,用户就不能使用W…

[综述笔记]Flexible large-scale fMRI analysis: A survey

论文网址:Flexible large-scale fMRI analysis: A survey | IEEE Conference Publication | IEEE Xplore 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正&#xff0…

关于网格数据导出指定格式的测试(以Gmsh导出nas格式为例)

本文主要讲述Gmsh如何导出nas格式的网格数据,众所周知,Gmsh可以导出多种网格数据格式,比如大家熟悉的msh、stl、inp、cgns(似乎不完善)等等,但是gmsh不支持nas格式的导出,只支持nas格式的导入&a…

银行量子金融系统应用架构设计

量子金融(即Financial-Quantum,简称Fin-Q),特指量子科技在金融行业中的应用。 目前,量子科技中以量子保密通信、量子随机数和量子计算发展进度较快,取得了诸多阶段性重大技术突破和商用成果,这…

Linux Ncurses库部分函数使用说明

目录 1. initscr()函数 2. endwin()函数 3. curs_set()函数 4.noecho()函数 5. keypad()函数 6. start_color()函数 7.init_pair()函数 8.getch()函数 9.move()函数 10.addch()函数 11. refresh()函数 12.inch()函数…

1072. 按列翻转得到最大值等行数

文章目录 题意思路代码 题意 题目链接 可以翻转任意列,求全是1和全是0的行,最多有多少行。 思路 对一行而言,能翻转成相同的(同为1,或者同为0),则相等。能反转成相反的,则巧好&am…

实战|使用 Node.js 和 htmx 构建全栈应用程序

在本教程中,我将演示如何使用 Node 作为后端和 htmx 作为前端来构建功能齐全的 CRUD 应用程序。这将演示 htmx 如何集成到全栈应用程序中,使您能够评估其有效性并确定它是否是您未来项目的不错选择。 htmx 是一个现代 JavaScript 库,旨在通过…

刘亦菲式能量保护法

➊睡到没有起床气才起来的10小时姑娘 有一次有人问刘亦菲有没有起床气,她调皮地回答:我一般都是睡到不气才起 没错,这位神仙姐姐连睡觉都是一种仙气 看回她以前的社交账号,不是在睡觉就是在赶往梦乡的路上,高铁上、房车…

多叉树题目:N 叉树的前序遍历

文章目录 题目标题和出处难度题目描述要求示例数据范围进阶 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 解法三思路和算法代码复杂度分析 题目 标题和出处 标题:N 叉树的前序遍历 出处:589. N 叉树的前序遍历 难度 3 级 题目…

vue/js总结合集

vuex的五大核心 内容作用映射位置调用其它state设置状态mapStatecomputedgetters获取内容mapGetterscomputed计算数据后返回mutations修改数据mapMutationsmethodscommit可以异步(不建议)不利于调试actions异步操作mapActionsmethodsdispatchmodules模块…

Docker 中安装 Redis

要在 Docker 中安装 Redis,你可以按照以下步骤进行操作: 拉取 Redis 镜像:在命令行中执行以下命令,从 Docker Hub 上拉取 Redis 镜像: docker pull redis 运行 Redis 容器:执行以下命令来在 Docker 中运行…

一文速通自监督学习(Self-supervised Learning):教机器自我探索的艺术

一文速通自监督学习(Self-supervised Learning):教机器自我探索的艺术 前言自监督学习是什么?自监督学习的魔力常见的自监督学习方法1. 对比学习2. 预测缺失部分3. 旋转识别4. 时间顺序预测 结语 🌈你好呀!…

蓝桥杯单片机快速开发笔记——特训1 LED闪烁和数码管同步显示

一、示例题目: 在CT107D单片机综合训练平台上,通过I/O模式编写代码,实现以下功能: 系统上电后,初始状态为关闭蜂鸣器、继电器、全部指示灯和数码管,然后进入循环,实现灯光闪烁和数码管计数。数…

代码随想录Day32

Day 32 贪心算法 Part03 今日任务 1005.K次取反后最大化的数组和 加油站 分发糖果 代码实现 1005.K次取反后最大化的数组和 这题有点思路,和题解也差不多,但是没完全通,感觉很复杂,无法下手 public int largestSumAfterKNeg…