跳转到主要内容

基于Redis的简单、分布式排序集

项目描述

PyPI version build status Coverage Status

您可能不需要像Celery或RQ这样的重型工具。维护AMQP服务器可能过度了。有一种更简单、更容易的方式来进行工作分发。

Redset提供了一种简单、通用的排序集,由Redis支持,可用于协调分布式系统和分配工作。与Celery或RQ等更常见的分发库不同,redset通过维护一个任务集合而不是列表或队列来避免某些用例的重复工作。它还提供了一个简单的接口,对于Python来说感觉非常自然。

Redset 当前用于野外执行以下操作:

  • 维护一个高吞吐量的工作队列,用于处理流更新

  • 为多生产者、多消费者爬取架构提供动力,该架构不会重复执行相同的工作

  • 维护一个简单的跨进程“已查看”项目集,每个项目都有一个TTL

  • 安排对社交服务分析的非重复、定期轮询

特性

  • 无需运行工作守护进程,无需监控重型AMQP服务

  • 适用于多个生产者和消费者

  • 使用序列化器与Python对象无缝、简单使用

  • 无依赖性:您提供一个实现 redis.client.Redis 接口的对象,我们不会提出任何问题。

  • 简单、易于阅读的实现

  • 模仿Python的本地 set 接口

  • 经过实战考验

  • 兼容Python 3

简单示例

import json
import redis

from redset import TimeSortedSet

r = redis.Redis()
ss = TimeSortedSet(r, 'important_json_biz', serializer=json)

ss.add({'foo': 'bar1'})
ss.add({'foo': 'bar2'})

ss.add({'foo': 'bar3'})
ss.add({'foo': 'bar3'})

len(ss)
# 3


# ...some other process A

ss.peek()
# {'foo': 'bar1'}

ss.pop()
# {'foo': 'bar1'}


# ...meanwhile in process B (at exactly same time as A's pop)

ss.take(2)
# [{'foo': 'bar2'}, {'foo': 'bar3'}]

文档

在这里

关于

本软件是在 Percolate 开发的,我们在所有涉及在进程边界维护同步项目集的各种事情中使用它。一个常见的用例是使用redset来协调需要生成重复请求的时间敏感任务。

Redset 对消费者的外观和行为没有意见。想要有一个由supervisor管理的普通Python消费者?没问题。想要能够在celery作业中弹出项目?太好了。Redset 对其使用位置或方式没有任何意见:机制,而非政策。

使用概念

redset.SortedSet 及其子类可以通过一些显著的参数进行实例化。

指定序列化器

由于Redis仅存储原始数字和字符串,因此处理序列化和反序列化是使redset在Python中易于使用的关键部分。

可以传递一个 serializer 实例(它遵守 redset.interfaces.Serializer 接口,尽管它不需要子类化它),以自动处理使用redset管理的项目的打包和拆包。

指定评分者

一个可调用对象,用于指定如何为要添加的项目生成评分,也可以作为 scorer 传递给 SortedSet 的构造函数。此可调用对象接受一个参数,即要“评分”的项目 对象(即序列化之前的项目)。

项目详情


下载文件

下载适合您平台的项目。如果您不确定要选择哪个,请了解更多关于 安装软件包 的信息。

源分布

redset-0.5.1.tar.gz (8.6 kB 查看散列)

上传

构建分布

redset-0.5.1-py3-none-any.whl (11.7 kB 查看散列)

上传于 Python 3

redset-0.5.1-py2-none-any.whl (11.7 kB 查看哈希值)

上传于 Python 2

由以下机构支持