如果我使用timedelta(days=1)创建一个celerybeat时间表,第一个任务将在24小时后执行,引用celerybeat文档:Usingatimedeltafortheschedulemeansthetaskwillbesentin30secondintervals(thefirsttaskwillbesent30secondsaftercelerybeatstarts,andthenevery30secondsafterthelastrun).但事实是,在很多情况下,调度程序在启动时运行任务实际上很重要,但我没有找到允许我在celery启动后立即运行任务的选项,我不是在
我正在使用Django1.6、RabbitMQ3.5.6、celery3.1.19。有一个周期性任务每30秒运行一次,并使用给定的eta参数创建200个任务。在我运行celeryworker之后,队列在RabbitMQ中慢慢创建,我看到大约1200个计划任务等待被触发。然后,我重新启动celeryworker,所有等待的1200个计划任务都从RabbitMQ中删除。我如何创建任务:my_task.apply_async((arg1,arg2),eta=my_object.time_in_future)我这样运行worker:pythonmanage.pyceleryworker-Qmy
我在我的服务器上安装了Django-Celery并尝试通过以下代码发送任务:$./manage.pyshellPython3.4.3(default,Oct142015,20:28:29)Type"copyright","credits"or"license"formoreinformation.IPython4.0.0--AnenhancedInteractivePython.?->IntroductionandoverviewofIPython'sfeatures.%quickref->Quickreference.help->Python'sownhelpsystem.objec
我正在使用Celery3.1.16代理(运行RabbitMQ)和多个Celeryworker,celeryd通过主管守护。问题在于任务更新。当我更新我的tasks.py文件时,celeryworker运行旧代码。Celery启动命令:/home/my_project/bin/celery-B--autoreload--app=my_app.celery:appworker--loglevel=INFO我在djangosettings.py中包含任务文件:CELERY_IMPORTS=['my_app.tasks']pyinotify已安装并工作(我猜是这样),celery日志的一部分:
我想要一个可以查看所有未决任务的地方。我不是在谈论注册的函数/类作为任务,而是我可以显示的实际计划作业:名称、task_id、eta、worker等。使用Celery2.0.2和djcelery,我在文档中找到了“inspect”。我试过:fromcelery.task.controlimportinspectdefget_scheduled_tasks(nodes=None):ifnodes:i=inspect(nodes)else:i=inspect()scheduled_tasks=[]dump=i.scheduled()ifdump:forworker,tasksindump:
我发现celery支持任务链:http://celery.readthedocs.org/en/latest/userguide/canvas.html#chains.问题是:如何停止链在任务中的执行?例如,我们得到了一个包含N个项目的链(N>2)。在第二个任务中,我们意识到我们不需要执行所有其余任务。怎么办? 最佳答案 在较新版本的celery(3.1.6)中,您可以通过简单地遍历链并依次撤销每个项目来撤销整个链。#Buildachainforresultsfromtasksimportadddfromceleryimportch
我们正在使用celery进行第三方http调用。我们有大约100多个简单地调用第三方HTTPAPI调用的任务。有些任务会批量调用API,例如凌晨4点发出50万个请求,而有些任务是连续的API调用流,几乎每秒接收一次或两次请求。大多数API调用响应时间在500-800毫秒之间。我们发现celery的交货速度非常慢。对于上述大多数任务,最大交付率在100/s(最大)到接近1/s(最小)之间。我相信这很糟糕,肯定有问题,但我无法弄清楚它是什么。我们从3台服务器的集群开始,逐渐将其变成7台服务器的集群,但没有任何改进。我们尝试了不同的并发设置,从自动缩放到固定的10、20、50、100个工作人
我的Django应用程序使用Django的标准WSGIHandler部署在Apache下的mod_wsgi中,通过Django端的表单登录对用户进行身份验证。所以对于Apache,用户是匿名的。这会降低Apache访问日志的用处。有没有办法在处理请求后通过WSGI包装器将用户名传回Apache,以便它出现在Apache访问日志中?(版本:Django1.1.1、mod_wsgi2.5、Apache2.2.9) 最佳答案 只有在使用嵌入式模式并且使用名为apswigpy的单独包时才能这样做,它为原始Apache请求对象提供了Pytho
我需要找到如何指定一种初始celery任务,它将以特殊定义的方式启动所有其他任务。这个初始任务应该在celery服务器启动时立即运行,并且永远不会再次运行。 最佳答案 如何使用celeryd_after_setup或celeryd_init信号?文档中的以下示例代码:fromcelery.signalsimportceleryd_init@celeryd_init.connect(sender='worker12@example.com')defconfigure_worker12(conf=None,**kwargs):...
这是我们目前拥有的:我们正在尝试获取缓存的Django模型实例,缓存键包括模型名称和实例ID。使用Django的标准memcached后端。此程序是非常广泛使用的常用程序的一部分,不仅在celery中。有时(随机和/或很少)cache.get(key)返回错误的对象:int或不同的模型实例,甚至出现相同模型不同ID的情况。我们通过检查模型名称和ID与缓存键的对应关系来捕捉这一点。bug只出现在我们三个celery任务的上下文中,从不在pythonshell或其他celery任务中重现。UPD:仅出现在长时间运行的CPU-RAM密集型任务下缓存存储正确的值(我们在错误刚刚出现时手动检查)