我需要以随机的时间间隔运行一个任务“CreateNotifications”。 这是我在芹菜的环境中要做的。在
t = random.randint(45, 85)
## print "time = ", t
## celery app configuration
app.conf.CELERYBEAT_SCHEDULE = {
# Executes at every 't' interval, where t is random
'create-notifications': {
'task': 'apps.notifications.tasks.CreateNotifications',
'schedule': timedelta(seconds=t),
},
}
现在的问题是,CELERY的这些设置只执行一次(当我运行命令python时)管理.pyrunserver),因此变量“t”和timedelta中的“seconds”值都会获得一个随机值,但只能获取一次。在
最终使上述过程成为一个周期性的过程,周期固定为X秒,只有X是在我启动服务器时随机选择的。在
另一方面,我尝试运行一个单独的任务,并在其中使用一个无休止的while循环,随机延迟,这样芹菜就只自动检测到一个任务,而且任务永远不会结束。我的目的是通过while循环中的随机延迟来解决的。 像这样(注意->;“while”在函数CreateNotifications()中)
^{pr2}$它做的事情完全是我想要的,但是现在有4个不同的工人在执行同一个任务,但我只想要一个。在
我已经尝试过对位于virtualenv/bin/目录中的celeryd文件进行更改,如下所示->;Celery. Decrease number of processes
因为/etc/defaults/中没有celeryd文件,但仍然没有成功
任何帮助都将不胜感激。在
你真的不应该在一个芹菜任务中没完没了的循环。如果你需要一个专门的进程,最好是自己运行,而不是通过芹菜。在
以后只要任务运行,就可以重新安排新任务。如下所示:
另一个选择是有一个调度程序任务,该任务按常规计划运行,但在不久的将来会将通知任务随机排队一段时间。例如,如果调度程序任务每45秒运行一次。在
^{pr2}$相关问题 更多 >
编程相关推荐