任何使@periodic_task只能在通话中运行的方法,它会在项目启动时自动运行吗?

问题描述 投票:1回答:1

有没有办法让periodic_task只能在通话中运行,我看到Pingit()开始我运行我的django-app python manage.py runserver

@periodic_task(run_every=crontab(minute="*/1"),options={"task_id":task_name})
    def Pingit():
        print('Every Minute Im Called')

我想让它只在我用Pingit调用时运行周期性任务。

django celery django-celery celerybeat djcelery
1个回答
1
投票

您可能最好使用@task,并在执行后让它重新排队,例如:

@app.task
def pingit(count=0):
    if count < 60 * 24 * 7:  # 7 days in minutes
        print('Every Minute Im Called')

        # Queue a new task to run in 1 minute
        pingit.apply_async(kwargs={'count': count + 1}, countdown=60)

# Start the task manually
pingit.apply_async()

如果需要向函数添加位置参数,可以使用args指定它们。例如,要传递name参数:

@app.task
def pingit(name, count=0):
    if count < 60 * 24 * 7:  # 7 days in minutes
        print('Every Minute Im Called')

        # Queue a new task to run in 1 minute
        pingit.apply_async(args=[name], kwargs={'count': count + 1}, countdown=60)

# Start the task manually
pingit.apply_async(args=['MyName'])
© www.soinside.com 2019 - 2024. All rights reserved.