草庐IT

CELERY_ALWAYS_EAGER

全部标签

python - 如何手动将 Celery 任务标记为已完成并设置其结果?

我有这个Celery任务:@app.taskdefdo_something(with_this):#instantiateaclassfromathirdpartylibraryinstance=SomeClass()#thisclassusescallbackstosendprogressinfoabout#thestatusandprogressofwhatwe'redoingdefprogress_callback(data):#thisstatuswillchangeto'finished'later#butthereturnvaluethatIwantasthetaskres

python - Celery 是否适合与许多小型分布式系统一起使用?

我正在编写一些软件来管理数百个smallsystems在“田野”中断断续续3G(或类似的)连接。Homebase需要向现场系统发送作业(例如,“报告您的状态”、“更新您的软件”等),现场系统需要将作业发送回服务器(例如,“检测到故障”、“这是一些数据”等)。我花了一些时间查看Celery它似乎是一个完美的选择:celeryd在基地运行可以为现场系统收集工作,celeryd在基地运行现场系统可以为服务器收集作业,并且可以在客户端可用时交换这些作业。那么,Celery是否适合解决这个问题?具体来说:大部分任务将被定向到单个工作人员(例如,“将‘get_status’作业发送到‘system

python - celery :为什么我需要经纪人来执行定期任务?

我有一个独立的脚本,它可以抓取页面、启动与数据库的连接并将数据库写入其中。我需要它在x小时后定期执行。我可以使用bash脚本和伪代码来实现它:whiletruedopythonscraper.pysleep60*60*xdone根据我对消息代理的了解,它们用于从一个正在运行的程序向另一个程序发送“信号”,原则上类似于HTTP。就像我有一段代码接受来自用户的电子邮件ID,它将带有电子邮件ID的信号发送到另一段将发送电子邮件的代码。我需要celery来在heroku上运行定期任务。我已经在单独的服务器上有一个mongodb。为什么我需要为rabbitmq或redis运行另一个服务器?我可以

python - 无法在 Django 测试中同步调用 celery 任务

我想在我的Django测试期间同步调用celery任务,而不需要运行celeryworker。为此,我在settings.py中指定了CELERY_ALWAYS_EAGER=True但它似乎不起作用。所以我决定将override_settings装饰器应用于如下所示的特定测试@override_settings(CELERY_ALWAYS_EAGER=True,BROKER_BACKEND='memory',CELERY_EAGER_PROPAGATES_EXCEPTIONS=True)deftest_foo(self):...不幸的是,这个测试仍然在我的celeryworker中调用

python - Celery 中如何执行 rate_limit?

我正在运行一个Django网站,我在其中使用Celery实现预防性缓存-也就是说,我什至在用户请求结果之前就计算并缓存结果。但是,在某些情况下,我的一个Celery任务可能会被多次调用(我会说比平均完成速度快得多,实际上)。我想对它进行rate_limit,这样它就不会在实际上没那么有用的情况下消耗大量资源。但是,我想首先了解Celery的celery.task.base.Task.rate_limit属性是如何强制执行的。任务被拒绝了吗?他们是否被延迟并稍后执行?提前致谢! 最佳答案 速率受限的任务永远不会被丢弃,它们在worke

python - celery 结果后端。 DisabledBackend 对象没有属性 _get_task_meta_for

我已经配置了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'

python - celery 节拍 : Limit to single task instance at a time

我有celerybeat和celery(四个worker)批量做一些加工步骤。其中一项任务大致是这样的:“对于每个尚未创建Y的X,创建一个Y。”任务以半快速(10秒)的速度定期运行。任务完成得非常快。还有其他任务正在进行中。我已经多次遇到节拍任务明显积压的问题,因此同一任务(来自不同的节拍时间)同时执行,导致错误地重复工作。任务似乎也是乱序执行的。是否可以限制celerybeat以确保一次只有一个未完成的任务实例?在任务上设置类似rate_limit=5的设置是否是执行此操作的“正确”方法?是否可以确保节拍任务按顺序执行,例如beat不是分派(dispatch)任务,而是将其添加到任务

python - 监控 celery ,我应该用什么?

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭5年前。Improvethisquestion我正在使用Django、Celery和Django-Celery。我想监控我的任务的状态/结果,但我对如何做到这一点有点困惑。我是否使用./manage.pyceleryev、./manage.pycelerymon、./manage.pycelerycam?我是否运行sudo/etc/init.d/celeryevcamstart?

python - celery 引发 ValueError : not enough values to unpack

尝试使用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:

python - 从异步 celery worker 发出的 SocketIO 不工作

我正在使用Flask-SocketIO创建一个实时通知系统。有一个外部API服务器通过RPC在单独的线程中调用socketio服务器。RPC调用的方法会创建一个Celery任务,该任务在使用时会调用调用socketio.emit()的方法。但是,由于在javascript客户端中未收到任何消息,因此消息似乎并未实际发送。我的直觉告诉我,由于Celeryworker在单独的进程中运行,被调用的socketio.emit()方法不会发送到连接的客户端,尽管对象存在于内存中的同一位置。服务器正在运行gevent,Celery正在接收并完成日志中看到的任务。此外,我已经验证了socketio.