m6米乐安卓版下载-米乐app官网下载

wakaq,在 python 中构建分布式任务队列 -m6米乐安卓版下载

小小亮 2022-09-06
421

为什么不直接使用 celery/rq/huey/tasktiger?

不幸的是,wakatime 使用 celery 已经快 10 年了。在那段时间里,我经历了许多严重的错误,其中一些在被引入多年后仍然存在。celery 曾经相当不错,但功能膨胀使项目难以维护。同样在我看来,将代码分成三个独立的 github 存储库会使代码库难以阅读。

然而,主要原因是: celery 延迟任务无法扩展。

如果您使用 celery 延迟任务,随着您的网站最终增长,您将开始看到此错误消息

qos: disabled: prefetch_count exceeds 65535

当这种情况发生时,工作人员会停止处理所有任务,而不仅仅是延迟的任务!随着 wakatime 的增长,我们开始更频繁地遇到这个错误。

我尝试了rqhueytasktiger,但它们缺少功能并且处理任务比 celery 慢。对于像 wakatime 这样的网站来说,分布式任务队列是必不可少的,我已经厌倦了遇到 bug。出于这个原因,我决定尽可能构建最简单的分布式任务队列,同时仍然提供 wakatime 所需的所有功能。

介绍 wakaq

wakaq是一个新的 python 分布式任务队列。使用它在后台运行代码,使您的网站保持快速和快速,并让您的用户保持快乐。

wakaq 很简单

它只有 1,264 行代码!

$ find . -name '*.py' -not -path "./migrations*" -not -path "./venv*" | xargs wc -l | grep " total" | awk '{print $1}' | numfmt --grouping
1,264

从第一行代码到在 wakatime 完全取代 celery只用了一周时间。这说明了它的简单性。

每个队列都是使用redis 列表实现的。延迟任务使用redis 排序集实现自己的队列广播任务共享一个redis pub/sub queue

wakaq 具备所有必要的功能

  • 队列优先级
  • 延迟任务(在 timedelta eta 之后运行任务)
  • 计划的 cron 定期任务
  • 广播任务(在所有工作人员上运行任务)
  • 任务软硬超时限制_
  • 可选择在软超时时重试任务
  • 通过在达到max_mem_percent时重新启动工作程序来防止内存泄漏
  • 超级最小且可维护

超出范围的功能包括速率限制、排他锁定、存储任务结果和任务链接。这些很容易添加到您的应用程序的任务代码中,并且您可能无论如何都希望根据您的应用程序的需求来实现这些。

wakaq 可以使用了

wakaq是稳定的,可以在生产中使用。wakaq 目前为wakatime网站的 prod 中的所有后台任务提供支持,包括但不限于:

  • 发送代码统计电子邮件报告
  • 更新我们的 letsencrypt ssl 证书
  • 预缓存仪表板、回购徽章和可嵌入图表
  • 我们不想阻止网络请求的其他任何事情

它是在bsd 许可下发布的,因此您可以在开源和闭源项目中使用它。如果您发现任何错误,请打开一个问题,但在请求新功能之前请三思而后行 。


原文标题:building a distributed task queue in python

原文作者: alan hamlett

原文链接:https://wakatime.com/blog/56-building-a-distributed-task-queue-in-python

最后修改时间:2022-09-06 15:23:57
「喜欢文章,快来给作者赞赏墨值吧」
【米乐app官网下载的版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

网站地图