Questions tagged «celery»

Celery是用于Python的分布式任务队列框架,用于异步和并行执行。

2
重试芹菜任务并以指数方式退回
对于这样的任务: from celery.decorators import task @task() def add(x, y): if not x or not y: raise Exception("test error") return self.wait_until_server_responds( 如果它引发异常,而我想从守护程序端重试,如何应用指数退避算法,即 2^2, 2^3,2^4等数秒后? 还从服务器端维护重试,以便如果该工作程序正好被杀死,那么产生的下一个工作程序将执行重试任务?

5
Celery与RabbitMQ:AttributeError:'DisabledBackend'对象没有属性'_get_task_meta_for'
我正在运行 使用Celery教程第一步”。 我们定义以下任务: from celery import Celery app = Celery('tasks', broker='amqp://guest@localhost//') @app.task def add(x, y): return x + y 然后调用它: >>> from tasks import add >>> add.delay(4, 4) 但是我收到以下错误: AttributeError: 'DisabledBackend' object has no attribute '_get_task_meta_for' 我正在同时运行celery worker和Rabbit-mq服务器。奇怪的是,芹菜工人将任务报告为成功: [2014-04-22 19:12:03,608: INFO/MainProcess] Task test_celery.add[168c7d96-e41a-41c9-80f5-50b24dcaff73] succeeded in 0.000435483998444s: 19 为什么这不起作用?
71 python  celery 

2
Rabbitmq或Gearman-选择作业队列
从目前的情况来看,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 在工作中,我们需要构建一个作业服务器来处理诸如发送电子邮件,构建PDF,处理某些数据等工作。显然,我们希望基于某种通用排队系统。我对Gearman很熟悉,这是它要解决的确切问题:将作业放在队列中,工人来接他们。但是,我看到了很多关于Rabbitmq的提及,并且不清楚在这种情况下如何使用它。 Rabbitmq是在其之上构建分布式作业系统的良好框架吗?

1
Django可能会在不久的将来运行任务
假设我有一个模型Event。活动结束后,我想向所有受邀用户发送通知(电子邮件,推送等)。类似于以下内容: class Event(models.Model): start = models.DateTimeField(...) end = models.DateTimeField(...) invited = models.ManyToManyField(model=User) def onEventElapsed(self): for user in self.invited: my_notification_backend.sendMessage(target=user, message="Event has elapsed") 现在,当然,关键的是onEventElapsed何时调用timezone.now() >= event.end。请记住,end距离当前日期可能要几个月。 我考虑过两种基本方法: 使用定期cron作业(例如,每五分钟左右一次),该作业检查最近五分钟内是否发生了任何事件并执行我的方法。 使用celery并计划onEventElapsed使用eta将来要运行的参数(在models save方法中)。 考虑选项1,可能的解决方案可能是django-celery-beat。但是,以固定的时间间隔运行任务以发送通知似乎有些奇怪。另外,我提出了一个(潜在的)问题,该问题(可能)会导致一个不太优雅的解决方案: 每五分钟检查一次过去五分钟内发生的事件吗?似乎有些动摇,也许某些事件错过了(或者其他事件收到了两次发送的通知?)。潜在的工作方式:向模型添加一个布尔字段,该字段设置为True在发送通知后立即设置。 同样,选项2也有其问题: 手动更改事件开始/结束日期时间时的情况。使用时celery,taskID一旦日期更改并发出新任务,就必须存储(easy,ofc)并撤消任务。但是我已经读到,当处理将来运行的任务时,芹菜存在(特定于设计的)问题:github上的Open Issue。我意识到这是如何发生的,为什么它只是解决所有问题而已。 现在,我遇到了一些可以潜在地解决我的问题的库: celery_longterm_scheduler(但是这是否意味着我不能像以前那样使用celery,因为Scheduler类不同?这也与django-celery-beat... 的可能用法联系在一起。使用两个框架中的任何一个,是否仍然可以将作业排队(只是运行时间更长一点,但还没有几个月?) django-apscheduler,使用apscheduler。但是,我找不到任何有关如何处理在不久的将来运行的任务的信息。 我处理此问题的方式是否存在基本原则上的缺陷?我很高兴收到您的任何意见。 注意:我知道这很可能是基于观点的,但是,不管有人认为什么是丑陋或优雅的,我可能都错过了一个非常基本的东西。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.