django - Heroku 上的 Celery、RabbitMQ 和 Django:达到内存限制
问题描述
在 Django 应用程序中使用 RabbitMQ 运行 Celery 任务时,我的 Heroku Dyno(爱好)目前已达到 RAM 内存限制。
我对 Celery 设置进行了一些尝试,但我一直在达到内存限制,并且我缺少有关内存优化的技术知识。我想知道我当前的设置是否可以做些什么来防止达到限制,或者是这里升级 Heroku Dyno 的唯一解决方案?
BROKER_URL = 'amqp://url'
BROKER_POOL_LIMIT = 5
CELERY_RESULT_BACKEND = None
CELERY_MAX_TASKS_PER_CHILD = 10
CELERY_MAX_MEMORY_PER_CHILD = 80000
Procfile:web: gunicorn app_name.wsgi worker: celery -A app_name worker -l info --without-heartbeat
Task.py file:@shared_task(acks_late=True, ignore_result=True)
def function_name(args):
解决方案
我遇到了同样的问题,将最大并发设置为 2 或 3 解决了这个问题。
在您的 procfile 中,添加-c 2
或-c 3
在工作人员定义中。
默认情况下,Celery 会将并发设置为可用的 CPU 数量。并发定义了将产生的芹菜工人的数量。
推荐阅读
- java - spring-boot如何在基于Jax-RS响应Httpstatus的try块中抛出多个自定义异常
- ruby - 如何使用 rest-client 传递表单数据
- javascript - 如何在 Javascript 中遍历来自 Flask 的列表?
- python - 在python中写入文件的正确方法(多次调用write函数,或者在大字符串上调用一次)
- azure - 在 Azure Application Insights 中禁用地理位置
- java - 在 C++ 和 Java 中使用 Maps
- ios - 如何使用 SwiftUI 遍历字典数组?
- python - 使用 df.to_parquet 将数据帧作为 parquet 文件保存到 S3 时,是否还可以设置 AWS 元数据值?
- java - 如何使用 java 和 maven 下载、解压缩并将压缩文件中的专有 jar 添加到编译中
- python - 在 python 中进行密码学的最佳方法是什么?