如何使用 django 和 celery 在特定时间启动任务
how to start a task at a specific time with django & celery
我正在使用 Celery,它适用于异步,但我需要设置一个针对特定日期时间的操作。
例如"on the 30th of August, 2019, at 11:35, do this."
我的 celery.py 现在非常简单,但它有效:
import time
from datetime import datetime, timedelta
from datetime import date
from celery import shared_task,current_task, task
from celery import Celery
app = Celery()
@app.task
def test():
print ('1')
todaynow = datetime.now()
print todaynow
我从视图中调用它并运行在兔子上打印
知道如何编写任务吗?
有
编辑:
我尝试调用 "test"
test.apply_async(eta=datetime(2019, 7, 31, 6, 28))
在 flower 中它收到任务但不执行它,为什么?
Celery 组件负责在特定时间向运行 调度任务,或者在一段时间后重复调度任务,称为 Celery Beat(调度器)。 Celery 文档有一个 complete section 描述它,详细说明如何 运行 它以及如何配置它。如果您熟悉 crontab,您将很容易创建自己的计划任务-运行s.
要安排任务,您需要使用 celery beat。
from celery.task import periodic_task
@periodic_task(run_every=crontab(minute="*")) # It will run your task every minute
def schedule_task():
print('1')
todaynow = datetime.now()
print(todaynow)
您可以使用定期任务在任何特定时间安排您的任务。
要了解更多信息,请使用此 link
https://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html.
创建任务后别忘了重启你的celery beat。
您可以使用 celery 为 "the 30 of august 2019 at 11 and 35 min do this" 创建一个 单次执行的 周期性调度程序,例如:
import time
from datetime import datetime, timedelta
from datetime import date
from celery import Celery, shared_task,current_task, task
from celery.schedules import crontab
app = Celery()
@app.on_after_configure.connect
def setup_periodic_tasks(sender, **kwargs):
sender.add_periodic_task(
crontab(hour=11, minute=35, day_of_month=30, month_of_year=8),
test.s(),
expires=1
)
@app.task
def test():
print ('1')
todaynow = datetime.now()
print todaynow
到运行一个特定时间的任务你可以将eta
参数传递给apply_async
test.apply_async(eta=datetime.datetime(2019, 8, 30, 11, 35))
我正在使用 Celery,它适用于异步,但我需要设置一个针对特定日期时间的操作。
例如"on the 30th of August, 2019, at 11:35, do this."
我的 celery.py 现在非常简单,但它有效:
import time
from datetime import datetime, timedelta
from datetime import date
from celery import shared_task,current_task, task
from celery import Celery
app = Celery()
@app.task
def test():
print ('1')
todaynow = datetime.now()
print todaynow
我从视图中调用它并运行在兔子上打印
知道如何编写任务吗?
有
编辑:
我尝试调用 "test"
test.apply_async(eta=datetime(2019, 7, 31, 6, 28))
在 flower 中它收到任务但不执行它,为什么?
Celery 组件负责在特定时间向运行 调度任务,或者在一段时间后重复调度任务,称为 Celery Beat(调度器)。 Celery 文档有一个 complete section 描述它,详细说明如何 运行 它以及如何配置它。如果您熟悉 crontab,您将很容易创建自己的计划任务-运行s.
要安排任务,您需要使用 celery beat。
from celery.task import periodic_task
@periodic_task(run_every=crontab(minute="*")) # It will run your task every minute
def schedule_task():
print('1')
todaynow = datetime.now()
print(todaynow)
您可以使用定期任务在任何特定时间安排您的任务。 要了解更多信息,请使用此 link https://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html.
创建任务后别忘了重启你的celery beat。
您可以使用 celery 为 "the 30 of august 2019 at 11 and 35 min do this" 创建一个 单次执行的 周期性调度程序,例如:
import time
from datetime import datetime, timedelta
from datetime import date
from celery import Celery, shared_task,current_task, task
from celery.schedules import crontab
app = Celery()
@app.on_after_configure.connect
def setup_periodic_tasks(sender, **kwargs):
sender.add_periodic_task(
crontab(hour=11, minute=35, day_of_month=30, month_of_year=8),
test.s(),
expires=1
)
@app.task
def test():
print ('1')
todaynow = datetime.now()
print todaynow
到运行一个特定时间的任务你可以将eta
参数传递给apply_async
test.apply_async(eta=datetime.datetime(2019, 8, 30, 11, 35))