草庐IT

python - Celery 与 AWS ELB 和 RabbitMQ 的连接中断

在我们的环境中,我们使用AWS上的RabbitMQ和Celery在多个节点上并行运行任务。最近我们将RabbitMQ变成了一个由3个节点组成的集群,配置了一个ha策略,并为所有3个节点的端口5672添加了一个AWS弹性负载均衡器(ELB)。我们的Celeryworker和客户端代码都使用ELBDNS作为代理URL。自该更改以来,我们注意到等待异步任务完成将引发异常IOError:Socketclosed。ELB将在60秒后关闭所有空闲连接。我们的任务需要几个小时才能完成。将BROKER_HEARTBEAT设置为低于60的值可解决工作端的连接中断。但是我们似乎找不到任何可以使客户端连接保

python - 使用 Celery 创建动态队列

这是我的场景:当用户登录到我的网站时,我会为给定用户排队一堆任务(通常每个任务需要100毫秒,每个用户有100多个任务)。这些任务排队到默认的Celery队列,我有100多个工作人员在运行。当任务在后端完成时,我使用websockets向用户显示实时进度。如果我只有1或2个活跃用户,生活会很美好。现在,如果我有几个并发用户登录到我的站点,则后面的用户会排在初始用户之后,他们的任务就会饿死(因为所有任务都进入同一个队列)。我的想法是为每个用户创建一个动态队列以确保公平。然而,根据Celery文档(http://docs.celeryproject.org/en/latest/usergu

python - celery 。减少进程数

有什么办法可以限制celery中的worker数量吗??我有小型服务器,celery总是在1个核心处理器上创建10个进程。我想将这个数字限制为3个进程。 最佳答案 我尝试在我的settings.py文件中将并发设置为1并将max_tasks_per_child设置为1并同时运行3个任务。它只生成1个进程作为用户,另外2个进程作为celery。它应该只运行1个进程,然后等待它完成,然后再运行另一个进程。我正在使用djangocelery。编辑{我通过在settings.py文件中写入CELERYD_CONCURRENCY=1来分配并发

python - RuntimeError : 'list' must be None or a list, not <class 'str' > while trying to start celery worker

我正在尝试在关注FirstStepsWithDjango时添加celery任务但我收到以下错误:Traceback(mostrecentcalllast):File"/Users/amrullahzunzunia/virtualenvs/flyrobe_new/bin/celery",line11,insys.exit(main())File"/Users/amrullahzunzunia/virtualenvs/flyrobe_new/lib/python3.5/site-packages/celery/__main__.py",line30,inmainmain()File"/Us

python celery : Update django model after state change

我设法找到了2个类似的主题来讨论这个问题,但不幸的是我无法从中得到最好的解决方案:UpdateDjangoModelFieldBasedOnCeleryTaskStatusUpdateDjangoModelFieldBasedOnCeleryTaskStatus我使用Django和Celery(+redis作为消息代理),我想在celery任务状态发生变化(从挂起->成功,挂起->失败)等时更新Django模型我的代码:importtimefromceleryimportshared_task@shared_task(name="run_simulation")defrun_simul

django - celery 没有连接到redis服务器

我有一个使用celery==4.2.1、redis==2.10.6、redis-server=4.0.9的django2.0.5应用程序。当我启动celeryworker时,我得到以下输出:--------------celery@octopusv4.2.1(windowlicker)----****--------*****--Linux-4.18.16-surface-linux-surface-x86_64-with-Ubuntu-18.04-bionic2018-10-3117:33:50--*-****----**----------[config]-**----------

Django + Celery 长期定时任务

我正在开发一个严重依赖Celery任务调度的Django应用程序,使用Redis作为后端。任务可以设置为长时间运行,也可以设置为几秒/分钟。我已经阅读了有关Redis可见性超时和时间增量大于可见性超时的调度任务的后果(我也在之前的项目中处理它),所以我很感兴趣是否有比我的解决方案是在需要执行“主”任务之前5分钟运行另一个“助手”任务,安排“主”任务在需要的时间内运行,将任务ID存储在数据库中,然后checkin“主”"task如果存储的任务ID是正在运行的任务。最后一部分(任务ID存储)是必需的,因为多次运行“助手”任务可能会产生很多“主要”任务实例,但使用这种方法每个任务都会有不同的

django - Celery 限速 : Is it possible to rate-limit a celery task differently based on a run-time parameter?

我想根据运行时确定的某些参数对Celery任务进行速率限制。例如:如果参数为1,则速率限制可能为100。如果参数为2,则速率限制可能为25。此外,我希望能够在运行时修改这些速率限制。celery是否提供了这样做的方法?我可以使用routing_key根据参数将任务发送到不同的队列,但celery似乎不支持队列级速率限制。一个可能的解决方案是在排队任务时使用eta,但我想知道是否有更好的方法来实现这一点。 最佳答案 Celery提供了一个内置的速率限制系统,但它的工作方式与大多数人期望的速率限制系统不同,并且它有几个限制。我在Redi

redis - 安装 Celery/Redis 以在另一台服务器上运行任务的正确方法是什么?

Web服务器本身运行django。我希望网络服务器将实际任务委托(delegate)给另一台服务器。 最佳答案 首先,在远程服务器上设置您的Redis服务器。更改您的django配置以连接到此服务器。部署应用程序时,我建议使用fabric部署到您的网络服务器和工作服务器。它还应该处理重启逻辑。 关于redis-安装Celery/Redis以在另一台服务器上运行任务的正确方法是什么?,我们在StackOverflow上找到一个类似的问题: https://sta

python - django-celery redis 内存错误

我正在使用django+celery和redis作为代理,我的一个任务涉及读取大约25MB大小的大文件并返回结果,通过该结果链接另一个任务来处理结果。由于我对redis不熟悉,所以在这里遇到错误,求助。可能是什么问题?[2013-06-2322:45:41,241:ERROR/MainProcess]Unrecoverableerror:MemoryError()Traceback(mostrecentcalllast):File"/home/property/virtualenv/property_env/lib/python2.6/site-packages/celery/work