我们希望在kubenetes集群中运行Celery/Redis,目前没有启用Redis持久性(一切都在内存中)。我担心:Redis重启(丢失内存中的数据)、worker重启/中断(由于崩溃和/或pod调度)以及transient网络问题。使用Celery使用Redis做任务处理时,需要怎样保证任务的可靠性? 最佳答案 在redis方面,只需确保您使用的是备份功能:https://redis.io/topics/persistenceHowtorecoverredisdatafromsnapshot(rdbfile)copiedfro
我目前正在尝试每分钟对计划的celery任务进行一次定期检查。如果任务还在运行,就让它继续运行,不要打断它,但是如果任务已经不在运行了,就激活任务,开始运行。但目前,我无法让脚本仅在不再运行时运行。我尝试了两种方法,但我的脚本没有检测到现有的正在运行的脚本,它开始运行,即使它不应该运行,我的任务也开始同时运行。我正在使用celery4.2.0和django1.11.6。关于如何解决这个问题的任何提示?谢谢在views.py中要运行的任务@task(name='send-one-task')defsend_one_task():foriinrange(1,100):time.sleep(
我有一个运行celery的Docker实例,它是这样构建的:dockerbuild-t/celery-imagemagick-fdocker/celeryDockerFile.然后我像这样运行它:dockerrun--env-file./docker/env--rmspaceofmotion/celery-imagemagick.env文件中有一些配置,包括针对本地redis-server的代理url.CELERY_BROKER_URL=redis://192.168.86.23:6379/0CELERY_RESULT_BACKEND=redis://192.168.86.23:637
我有:1)标准端口上的redis-这是缓存2)端口53333上的redis-这是一个代理为什么celery获取任务成功,却没有返回到53333端口?我可以通过标准端口上的redis-cli看到这个任务。你能帮我更正“celeryconfig.py”吗? 最佳答案 很抱歉给您带来麻烦...按照插入到“celeryconfig.py”的字符串:CELERY_RESULT_BACKEND="redis"CELERY_REDIS_HOST="localhost"CELERY_REDIS_PORT=56379...以及所有工作。
我正在测试Django+Celery,HelloWorld示例。使用RabbitMQcelery工作正常,但是当我切换到Redis代理/结果时,我得到以下信息:%timeitadd.delay(1,2).get()1loops,bestof3:503msperloopsettings.pyCELERY_RESULT_BACKEND="redis"BROKER_URL='redis://localhost:6379'tasks.py@task()defadd(x,y):returnx+y上面的测试有没有问题? 最佳答案 我发现解决方案
我有以下设置:celery-with-redis-3.0-activecelery-3.0.12-activedjango-celery-3.0.11-activedjango-kombu-0.9.4-activekombu-2.5.8-activeredis-2.4.10我的celery设置如下:BROKER_URL="redis://:password@localhost:6379/0"REDIS_DB=0REDIS_CONNECT_RETRY=TrueCELERY_SEND_EVENTS=TrueCELERY_RESULT_BACKEND="redis://:password@l
所以我已经使用celeryv3.x一段时间了,并考虑在正式发布后迁移到v4。现在,我正在使用可通过PyPI获得的v4.0.2。这两个版本几乎没有不匹配的地方,但让我感到困惑的是:这是我的任务文件:fromceleryimportgroup,chordfromworkerimportapp@app.task(name='task')deftask(i):returni@app.task(name='remaining')defdummy(result):printresult@app.task(name='mainTask')defmainTask():groupTask=group([
我的想法是允许许多用户向一个实例发出大量的发布请求。假设实例配置为一次处理一个实例,我使用Celery和Redis作为消息代理来异步完成每个人的任务,尽管需要一些时间。我的问题是如何查看或跟踪某个用户的任务完成了多少?例如,如果A提出10个请求,我怎么知道10分钟后A的所有请求是否都已完成? 最佳答案 在您的http处理程序中获取或定义userid。将其作为参数传递给任务。使用redis存储统计信息。classCallbackTask(Task):defon_success(self,retval,task_id,args,kwar
.ebextensions文件脚本中的celery_config.txt#!/usr/bin/envbash#Getdjangoenvironmentvariablesceleryenv=`cat/opt/python/current/env|tr'\n'','|sed's/export//g'|sed's/$PATH/%(ENV_PATH)s/g'|sed's/$PYTHONPATH//g'|sed's/$LD_LIBRARY_PATH//g'`celeryenv=${celeryenv%?}#Createceleryconfiguraitonscriptceleryconf="[p
我正在从事一个项目,该项目的目标是运行一个将任务发送到Celery队列的守护进程,Redis用作代理。每个任务必须一次处理一次(不允许并发)。为了执行此操作,我在我的守护进程中实现了以下代码,它充当Redis的锁:whileTrue:forfooinbar:ifnotself.redis_client.exists(foo.name):# SendthetasktotheCeleryqueuetask=celery_app.send_task('buzz',context={'name':foo.name})redis_client.send(foo.name,task.id)time