Django celery的替代品Dramatiq使用特性详解

 更新时间:2023年06月21日 11:04:35   作者:alue  
这篇文章主要为大家介绍了Django celery的替代品Dramatiq使用特性详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

Django 框架消息队列 celery

Django 框架需要一个消息队列来支持分布式任务处理,大部分人会选择 celery。但 celery 不支持 windows。

之前,用过funboost,功能强大,但是其代码充斥着拼写错误,让人难以忍受。

今天看了 Dramatiq, 发现完全满足项目需求。于是上手尝试了一下。

celery 特性

  • 如果用了普罗米修斯中间件,则可以通过 http://127.0.0.1:9191/ ,查看workers状态。(在windows上试了,响应不稳定)
  • 代码变动后,可向主进程发送 SIGHUP 信号,从而让 workers 更新状态。(但windows下,没有有向进程发送信号的便捷手段)
$ kill -s HUP 13047
  • 可以加入 --watch 参数,实现 hot-reload, 但生产环境不推荐。
  • max_retries:设定最大重试次数。
  • retry_when:设定重试条件。
  • max_age :任务寿命毫秒。

当消息超过最大重试次数或者在队列里时长超过寿命,则会进入死信区,在这里最多保留 7 天,然后被丢弃。

  • time_limit:执行时长上限(毫秒),默认为 10 分钟。超时,则会报出 TimeLimitExceeded 异常。
  • priority : 任务优先级, 默认为 0, 越小优先级越高。
  • send_with_options(): 提供任务调度能力
  • 方便与Django框架结合,在admin中能够看到任务执行历史。

Actors

  • Actor 的并行

你的 actor 会跟其它 actors 并发执行,注意操作相同资源时,可能出现的竞争关系。

  • 简单消息参数

给 actor 传递的消息应该是能被 json 序列化的数据,例如 bool, int, float, bytes, string, list and dict.

  • 幂等性

受网络、硬件、电源等因素影响,一个 actor 可能会反复接收到相同消息,所以你要保证多次执行 actor 的安全性。

Messages 消息

brokers 接收到消息后,会持久化到硬盘。broker 重启后,会重新激活消息。

消息处理结果,可以通过 Results 中间件,返回 Redis 或者 Memcached 中。

优雅的处理中断

import dramatiq
from dramatiq.middleware import Interrupt
@dramatiq.actor(max_retries=3, notify_shutdown=True)
def long_running_task():
    try:
        setup()
        do_work()
    except Shutdown:
        cleanup()
        raise

定时任务

可以跟apscheduler结合,实现定时执行任务的功能。

以上就是Django celery的替代品Dramatiq使用特性详解的详细内容,更多关于Django celery替代品Dramatiq的资料请关注脚本之家其它相关文章!

相关文章

  • Python for循环详细讲解(附代码实例)

    Python for循环详细讲解(附代码实例)

    这篇文章主要给大家介绍了关于Python for循环详细讲解的相关资料,在Python中,for循环是一种常用的控制结构,用于遍历序列(如列表、元组、字符串等)中的元素,需要的朋友可以参考下
    2024-03-03
  • 编写Python脚本把sqlAlchemy对象转换成dict的教程

    编写Python脚本把sqlAlchemy对象转换成dict的教程

    这篇文章主要介绍了编写Python脚本把sqlAlchemy对象转换成dict的教程,主要是基于Python的model类构建一个转换的方法,需要的朋友可以参考下
    2015-05-05
  • Python实现查找二叉搜索树第k大的节点功能示例

    Python实现查找二叉搜索树第k大的节点功能示例

    这篇文章主要介绍了Python实现查找二叉搜索树第k大的节点功能,结合实例形式分析了Python二叉搜索树的定义、查找、遍历等相关操作技巧,需要的朋友可以参考下
    2019-01-01
  • Python实现邮件的批量发送的示例代码

    Python实现邮件的批量发送的示例代码

    下面小编就为大家分享一篇Python实现邮件的批量发送的示例代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • Python调用服务接口的实例

    Python调用服务接口的实例

    今天小编就为大家分享一篇Python调用服务接口的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • Gauss-Seidel迭代算法的Python实现详解

    Gauss-Seidel迭代算法的Python实现详解

    这篇文章主要介绍了Gauss-Seidel迭代算法的Python实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-06-06
  • python 读取串口数据的示例

    python 读取串口数据的示例

    这篇文章主要介绍了python 读取串口数据的示例,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-11-11
  • Python爬虫设置ip代理过程解析

    Python爬虫设置ip代理过程解析

    这篇文章主要介绍了Python爬虫设置ip代理过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • Python TCP通信客户端服务端代码实例

    Python TCP通信客户端服务端代码实例

    这篇文章主要介绍了Python TCP通信客户端服务端代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • linux系统使用python监测系统负载脚本分享

    linux系统使用python监测系统负载脚本分享

    这篇文章主要介绍了linux系统使用python监测系统负载脚本,大家参考使用吧
    2014-01-01

最新评论