我已经配置了celery和后端:cleryapp=Celery('tasks_app',brocker='amqp://guest@localhost//',backend='db+postgresql://guest@localhost:5432')当我启动worker时,'results'似乎被禁用,但我在这里读到另一个问题,这不是问题所在。数据库正在正确获取所有数据,但是result=AsyncResult(task_id)加注AttributeError:'DisabledBackend'objecthasnoattribute'_get_task_meta_for'
我有celerybeat和celery(四个worker)批量做一些加工步骤。其中一项任务大致是这样的:“对于每个尚未创建Y的X,创建一个Y。”任务以半快速(10秒)的速度定期运行。任务完成得非常快。还有其他任务正在进行中。我已经多次遇到节拍任务明显积压的问题,因此同一任务(来自不同的节拍时间)同时执行,导致错误地重复工作。任务似乎也是乱序执行的。是否可以限制celerybeat以确保一次只有一个未完成的任务实例?在任务上设置类似rate_limit=5的设置是否是执行此操作的“正确”方法?是否可以确保节拍任务按顺序执行,例如beat不是分派(dispatch)任务,而是将其添加到任务
关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭5年前。Improvethisquestion我正在使用Django、Celery和Django-Celery。我想监控我的任务的状态/结果,但我对如何做到这一点有点困惑。我是否使用./manage.pyceleryev、./manage.pycelerymon、./manage.pycelerycam?我是否运行sudo/etc/init.d/celeryevcamstart?
尝试使用Celery运行简单示例并收到异常。RabbitMQ在Docker中启动,也尝试在本地启动它。Celery在本地Windows主机上运行fromceleryimportCeleryapp=Celery('tasks',broker='amqp://192.168.99.100:32774')@app.task()defhello():print('hello')if__name__=='__main__':hello.delay()我的错误文本摘录:[2017-08-1800:01:08,632:ERROR/MainProcess]Taskhandlerraisederror:
我正在使用Flask-SocketIO创建一个实时通知系统。有一个外部API服务器通过RPC在单独的线程中调用socketio服务器。RPC调用的方法会创建一个Celery任务,该任务在使用时会调用调用socketio.emit()的方法。但是,由于在javascript客户端中未收到任何消息,因此消息似乎并未实际发送。我的直觉告诉我,由于Celeryworker在单独的进程中运行,被调用的socketio.emit()方法不会发送到连接的客户端,尽管对象存在于内存中的同一位置。服务器正在运行gevent,Celery正在接收并完成日志中看到的任务。此外,我已经验证了socketio.
我正在寻找一种方法来限制何时调用函数,但仅限于输入参数不同时,即:@app.task(rate_limit="60/s")defapi_call(user):do_the_api_call()foriinrange(0,100):api_call("antoine")api_call("oscar")所以我希望api_call("antoine")每秒调用60次和api_call("oscar")每秒60次。关于我该怎么做的任何帮助?--编辑27/04/2015我曾尝试在任务中使用rate_limit调用子任务,但它也不起作用:rate_limit始终应用于所有实例化的子任务或任务(这
我遇到了这个问题,但我完全不知道它是从哪里来的。我使用的代码与theCelerytutorial中提供的代码完全相同除了我将项目目录也用作我唯一的应用程序目录这一事实(因此,拥有models.py、views.py并将“proj”添加到INSTALLED_APPS)。奇怪的是,在我的本地机器上尝试这个设置时,错误总是出现在每个django命令(迁移、shell...)中。删除virtualenv并重新安装misteriously修复了它。现在,将应用程序推送到Heroku时,我遇到了同样的问题,无法正常工作。有什么提示吗?谢谢!ps:Python3.4.2,Django1.8.4,Ce
类似于我的问题here我正在尝试设置多个亚马逊EC2实例来进行一些多处理。我正在考虑使用celery来管理worker。有没有人使用本地计算机作为主机在EC2实例上使用celery?有没有人有任何好的建议、教程、意见等可能有帮助?我用celery在django中做了一些简单的异步过程,但没有达到这种规模(工作人员和主机在同一台机器上)。而且大部分处理都是“基于文件的”(即读写文件)......你认为用celery腌制和传输文件的内容会更好吗(大多数文件是1-2kb的文本)或跨EC2实例镜像文件系统,然后让工作人员返回结果(通常是0.5kb的文本)。 最佳答案
如何从任务中向当前多处理池添加更多线程(并删除线程)(即celeryd运行时CELERYD_CONCURRENCY=10,但我想即时将其更改为CELERYD_CONCURRENCY=15)?有一个函数叫做celery.concurrency.processes.TaskPool.Pool.grow但我不知道如何从正在运行的任务中调用它,也不知道它是否是执行该操作的正确函数。 最佳答案 阅读来源:https://github.com/ask/celery/blob/master/celery/concurrency/processes
我有几个celery节点在生产中使用rabbitmq运行,我一直在处理服务中断的部署。我必须关闭整个站点才能将新代码部署到celery。我将每个child的最大任务设置为1,所以理论上,如果我对现有任务进行更改,它们应该在下次运行时生效,但是注册新任务呢?我知道重启守护进程不会杀死正在运行的worker,而是会让他们自己死掉,但这看起来仍然很危险。这个问题有优雅的解决方案吗? 最佳答案 这里具有挑战性的部分似乎是确定哪些celery任务是新的,哪些是旧的。我建议在rabbitmq中创建另一个虚拟主机并执行以下步骤:使用新代码更新Dj