簡體   English   中英

如何在特定時間使用django和celery啟動任務

[英]how to start a task at a specific time with django & celery

我正在使用Celery,它可用於異步,但是我需要將操作設置為特定的日期時間。

例如,“在2019年8月30日11:35,執行此操作”。

我的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

我從視圖中調用它並在兔子上運行打印

對如何編寫任務有任何想法嗎?

ty

編輯:

我嘗試稱呼“測試”

test.apply_async(eta=datetime(2019, 7, 31, 6, 28))

在花中,它接收任務但不執行它,為什么?

在此處輸入圖片說明

負責安排任務在特定時間或一段時間后重復運行的Celery組件稱為Celery Beat(調度程序)。 Celery文檔有一個完整的部分對其進行了描述,並詳細介紹了如何運行它以及如何對其進行配置。 如果您熟悉crontab,則可以輕松創建自己的計划任務運行。

要安排任務,您需要使用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)

您可以使用定期任務在任何特定時間安排任務。 要了解更多信息,請使用此鏈接https://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html

創建任務后,不要忘記重啟芹菜節拍。

您可以使用celery為“ 2019年8月30日的11和35分鍾執行此操作”創建單個執行的定期調度程序:

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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM