重复使用芹菜任务

2024-09-29 17:12:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要以随机的时间间隔运行一个任务“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文件,但仍然没有成功

任何帮助都将不胜感激。在


Tags: 文件gtapp间隔环境过程时间random
1条回答
网友
1楼 · 发布于 2024-09-29 17:12:57

你真的不应该在一个芹菜任务中没完没了的循环。如果你需要一个专门的进程,最好是自己运行,而不是通过芹菜。在

以后只要任务运行,就可以重新安排新任务。如下所示:

@app.task
def create_notifications():
     try:
          #
     finally:
          t = random.randint(45, 85)
          create_notifications.apply_async(countdown=t)

另一个选择是有一个调度程序任务,该任务按常规计划运行,但在不久的将来会将通知任务随机排队一段时间。例如,如果调度程序任务每45秒运行一次。在

^{pr2}$

相关问题 更多 >

    热门问题