基于Django模型的任务队列。
项目描述
ModelQueue 是一个基于Django模型的Apache2许可的任务队列。
例如,在appname/models.py
import modelqueue from django.db import models class Task(models.Model): data = models.TextField() status = modelqueue.StatusField( # ^-- Just a models.BigIntegerField db_index=True, # ^-- Index for faster queries. default=modelqueue.Status.waiting, # ^-- Waiting state is ready to run. )
在appname/management/commands/process_tasks.py中
import modelqueue, time from django.core.management.base import BaseCommand from .models import Task class Command(BaseCommand): def handle(self, *args, **options): while True: task = modelqueue.run( Task.objects.all(), # ^-- Queryset of models to process. 'status', # ^-- Field name for model queue. self.process, # ^-- Callable to process model. ) if task is None: time.sleep(1) # ^-- Bring your own parallelism/concurrency. def process(self, task): pass # Process task models.
在appname/admin.py中
class TaskAdmin(admin.ModelAdmin): actions = [*modelqueue.admin_actions('status')] # ^-- Change task status in admin. list_filter = [ modelqueue.admin_list_filter('status'), # ^-- Filter tasks in admin by queue state. ] def get_changeform_initial_data(self, request): # v-- Automatically fill in status field when adding a new task. return {'status': int(modelqueue.Status.waiting())}
ModelQueue 是一个危险的项目。它将一个坏主意变得简单而有效。你可能会后悔将数据库用作任务队列,但今天不会是那样!
客户评价
“我设计关系数据库系统不是为了这个。” ~ Edgar Codd
“至少你是在使用事务。” ~ Jim Gray
“你成功地忽略了队列理论中的大多数重要内容。” ~ Agner Erlang
你的公司或网站是否使用 ModelQueue?给我们发消息并告诉我们。
功能
纯Python
支持Django的管理界面
任务可以重试、中止和取消
支持每个任务多次尝试
使用线程、多进程或asyncio自行提供并行性
性能很重要(在模型中添加单个64位字段)
完全文档化
100%测试覆盖率
多年的生产环境压力测试
在Python 3.10上开发
与所有Django版本兼容
在CPython 3.6、3.7、3.8、3.9、3.10上测试
在Linux、Mac OS X和Windows上测试
快速入门
使用 ModelQueue 的安装非常简单,只需使用 pip
$ python -m pip install modelqueue
您可以使用 Python 内置的帮助功能在解释器中访问文档
>>> import modelqueue >>> help(modelqueue)
用户指南
对于那些想要更多详细信息的人来说,本部分文档介绍了介绍、基准、开发和 API
参考和索引
ModelQueue 许可证
版权所有 2022 Grant Jenks
在 Apache 许可证 2.0 版(“许可证”)下授权;除非适用法律要求或书面同意,否则不得使用此文件,除非遵守许可证。您可以在以下位置获取许可证副本:
除非适用法律要求或书面同意,否则根据许可证分发的软件按“原样”基础分发,不提供任何明示或暗示的保证或条件。有关许可证中规定的具体语言和限制,请参阅许可证。