- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个提醒类型的应用程序,它使用“eta”参数在 celery 中安排任务。如果提醒对象中的参数发生变化(例如提醒时间),那么我会撤销之前发送的任务并排队一个新任务。
我想知道是否有任何好的方法可以在 celeryd 重新启动时跟踪已撤销的任务。我希望能够动态地向上/向下扩展 celeryd 进程,并且似乎在发送撤销命令后启动的任何 celeryd 进程仍将执行该任务。
一种方法是保留已撤销任务 ID 的列表,但这种方法会导致列表任意增长。修剪此列表需要保证任务不再位于 RabbitMQ 队列中,这似乎是不可能的。
我还尝试为每个 celeryd 工作人员使用共享的 --statedb 文件,但似乎 statesdb 文件仅在工作人员终止时更新,因此不适合我想要完成的任务。
提前致谢!
最佳答案
有趣的问题,我认为使用广播命令应该很容易解决。如果当一个新的工作人员启动时,它要求所有其他工作人员转储其已撤销的工作人员给新 worker 的任务。添加两个新的远程控制命令,您可以使用 @Panel.register
,
模块control.py:
from celery.worker import state
from celery.worker.control import Panel
@Panel.register
def bulk_revoke(panel, ids):
state.revoked.update(ids)
@Panel.register
def broadcast_revokes(panel, destination):
panel.app.control.broadcast("bulk_revoke", arguments={
"ids": list(state.revoked)},
destination=destination)
将其添加到 CELERY_IMPORTS:
CELERY_IMPORTS = ("control", )
现在唯一缺少的问题是连接它,以便新的工作人员启动时触发 broadcast_revokes
。我想你可以使用 worker_ready
信号:
from celery import current_app as celery
from celery.signals import worker_ready
def request_revokes_at_startup(sender=None, **kwargs):
celery.control.broadcast("broadcast_revokes",
destination=sender.hostname)
关于python - 如何跨多个 celeryd 进程跟踪已撤销的任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10062999/
总结 我通过 celeryd ( as per instructions ) 将 Celery 作为守护进程运行 在配置文件/etc/default/celeryd BROKER_URL="redis
我正在尝试使用Celery使用 RabbitMQ 后端在 Fedora 上运行异步后台任务,但我发现它非常不可靠。最大的问题是它偶尔会多次运行相同的任务,而我无法诊断原因。 我不认为我的代码多次触发该
如何确保 celeryd 仅作为单个进程运行?当我运行 manage.py celeryd --concurrency=1 然后运行 ps aux | grep celery 我看到 3 个实例在
我们已将 django 配置为在触发任何错误 或以上错误时向我们发送电子邮件。这是使用标准 LOGGING configuration 完成的在 Django 。我想在 celery 中有同样的行为。
在运行状态命令时出现以下错误:- Am using rabbitmq as the messaging broker 我正在关注这个 blog sudo /etc/init.d/celeryd st
我将 celeryd 作为守护进程运行,但有时我无法优雅地停止它。当我发送 TERM 信号并且队列中有项目(在本例中为 service celeryd stop )时,celeryd 将停止接受新作业
我以一种不常见的方式使用 celery - 我在 celery 启动时创建自定义进程,该进程应该在 celery 运行时一直运行。Celery 工作人员使用此过程来完成他们的任务(不需要详细信息)。
我发布了这个问题(和答案),所以如果以后有人遇到这个问题,你可以用谷歌搜索。 如果你想像这样在 Django 中运行 celeryd: python manage.py celeryd 您可以在启动后
我有一个提醒类型的应用程序,它使用“eta”参数在 celery 中安排任务。如果提醒对象中的参数发生变化(例如提醒时间),那么我会撤销之前发送的任务并排队一个新任务。 我想知道是否有任何好的方法可以
我正在尝试在我的设置中运行 celerdy + redis。 CELERYD_NODES="worker1" CELERYD_NODES="worker1 worker2 worker3" CELER
大约 1 个月的时间 celeryd 工作正常,但现在我注意到 celeryd 已停止工作。我尝试重新启动 celery 但出现错误。 下面是我尝试启动 celery 的命令... Command1
上周我在我的生产系统上安装了 RabbitMQ 和 Celery,在我的本地开发人员上进行了测试并且一切正常。 我感觉我的任务没有在生产环境中执行,因为我有大约 1200 个任务仍在队列中。 我运行
尝试使用 celery multi 运行 supervisord (3.2.2)。 好像是supervisord处理不了。单个 celery worker 工作正常。 这是我的supervisord配
当我检查 celery 是否正在运行时,我收到消息“celeryd dead but subsys locked”。 我在尝试停止服务时收到一条 [失败] 消息,而一旦我启动它,我又收到此消息。 我已
我对 redis 和 celery 有点陌生。每次重启apache都需要重启celeryd和redis吗?我将 celery 和 redis 与托管在 webfaction 上的 django 项目一
我们在 Supervisor 后面运行 Celery 并以 celeryd --events --loglevel=INFO --concurrency=2 但是,这会创建一个最多三层深的流程图,最多
我的 celery 配置文件中有以下设置: CELERYD_LOG_DEBUG='FALSE' CELERYD_LOG_FILE=r'/var/log/celery/celeryd.log' CELE
我刚开始使用django-celery我想设置 celeryd 作为守护进程运行。 instructions但是,似乎表明一次只能为一个站点/项目配置它。 celeryd 可以处理多个项目,还是只能处
这些有什么区别? celery celery 工 celerybeat 我正在尝试设置 celery + supervisor,网络上的一些 conf 文件不止一个,而其他人只有一个。 最佳答案 据我
我有一项每分钟更新一次的任务。 这是我用于Django应用程序的Dockerfile。 FROM python:3-onbuild COPY ./ / EXPOSE 8000 RUN pip3 ins
我是一名优秀的程序员,十分优秀!