Celery 任务积压但部分 Worker 空闲:worker_prefetch_multiplier 引发分配不均的排查与治理
适用场景 使用 Celery + Redis/RabbitMQ 承担异步任务。队列中仍有大量待执行任务,但监控显示少数 Worker 忙碌、其余 Worker 空闲;或者短任务被长任务“压住”,整体延迟持续升高。本文以默认的 prefork 并发池和 RabbitMQ 为例,Redis broker 的排查思路相同。
Tag
包含这个标签的文章。
适用场景 使用 Celery + Redis/RabbitMQ 承担异步任务。队列中仍有大量待执行任务,但监控显示少数 Worker 忙碌、其余 Worker 空闲;或者短任务被长任务“压住”,整体延迟持续升高。本文以默认的 prefork 并发池和 RabbitMQ 为例,Redis broker 的排查思路相同。
适用场景 这篇文章适用于使用 Python httpx 调用内部 HTTP 接口、第三方 API、网关或微服务时,线上偶发出现请求超时、任务堆积、接口吞吐下降的问题。常见场景包括: 定时任务批量调用接口; FastAPI、Django、Celery worker 中复用 httpx.Client 或 httpx.Asy
当你需要测量函数执行时间并记录日志时,一个实用的工具是Timer类。本文将介绍如何使用Timer类来装饰同步和异步函数,并展示它们的用法。 首先,让我们来看一下Timer类的定义: import asyncio import time from functools import wraps from loguru im
JsonPath JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。适用于进行数据交互的场景,比如网站前台与后台之间的数据交互。 json示例数据 { "store": { "book": [ { "cate
使用 RabbitMQ 延迟消息插件来调度celery任务。 RabbitMQ 延迟消息插件: RabbitMQ 延迟交换插件用于实现消息到达交易所和传递到队列之间的等待时间。每次发布消息时,都可以指定以毫秒为单位的偏移量。 我们可以声明类型为“x-delayed-message”的交换,然后使用自定义标头 x-del
分布式锁应该具备的条件: 在分布式系统环境下,任意时刻,只能有一个客户端能持有锁; 高可用/高性能的获取锁和释放锁,必须保证加锁和解锁是同一个客户端所为; 具备锁失效机制(防止死锁),即使有一个客户端在持有锁期间崩溃而没有主动释放锁,也能保证后续其他客户端能正常加锁; 具备非堵塞特性,即没有获取到锁,直接返回获取锁失败
import time def timer(function): """ 装饰器函数timer :param function:想要计时的函数 :return: """ def wrapper(*args, **kwargs): time_start = time.time() res = function(*args
一些常见的跨平台日志收集平台,如阿里云日志、efk,一般都是按一行作为一条日志记录。 Python默认的输出会将消息原样输出,如果有异常的话,会将异常堆栈多行形式返回。不方便进行日志的收集分析。所以需要将其输出为一行。 创建MyFormatter格式化类 参考官方 import logging class MyForm
自定义中间件 在项目下创建一个session_cache.py文件 from django.utils.deprecation import MiddlewareMixin from django.core.cache import cache class SessionCacheMiddleware(Middlewa
在使用Django rest_framwork中ApiView实现分页并自定义返回数据 自定义分页格式 from rest_framework.views import Response from collections import OrderedDict from rest_framework.pagination