Celery定时任务

一:定时任务

目录结构:

celery.py:

from __future__ import absolute_import, unicode_literals
from celery import Celery


app = Celery('regu_pro',
             broker='redis://127.0.0.1',
             backend='redis://127.0.0.1',
             include=['regu_pro.clocking_task'])

# Optional configuration, see the application user guide.
app.conf.update(
    result_expires=3600,
    timezone = 'Asia/Shanghai',  # 修该成亚洲上海时间
)


if __name__ == '__main__':
    app.start()

 

clocking_task.py:

from __future__ import absolute_import, unicode_literals  #

from .celery import app
from celery.schedules import crontab


@app.on_after_configure.connect
def setup_periodic_tasks(sender, **kwargs):
    #每10秒调用一次
    sender.add_periodic_task(10, test.s('hello'), name='add every 10')
    #
    # 每30秒调用一次
    sender.add_periodic_task(30, test.s('world'), expires=10)

    # Executes every Monday morning at 7:30 a.m.
    sender.add_periodic_task(
        crontab(hour=16, minute=7, day_of_week=4),   # 星期4,16点,7分  调用一次
        test.s('定时任务启动'),
    )

@app.task
def test(arg):
    print(arg)

启动:

目录:/home/jm/proj/ 下运行 
celery -A regu_pro worker -l debug # 使用此命令 你可以看到任务已经添加进去了

 

接着再开一个终端:

celery -A regu_pro.clocking beat  # celery beat 是 任务调度器

#最后等待运行

 

-----------------------------------------分割线------------------------------------------

 写成配置样式的调用:

from __future__ import absolute_import, unicode_literals
from celery import Celery
from celery.schedules import crontab


app = Celery('regu_pro',
             broker='redis://127.0.0.1',
             backend='redis://127.0.0.1',
             include=['regu_pro.clocking_task'])

# Optional configuration, see the application user guide.
app.conf.update(
    result_expires=3600,
    timezone = 'Asia/Shanghai',
)

app.conf.beat_schedule = {
    # Executes every Monday morning at 7:30 a.m.
    'add-every-monday-morning': {
        'task': 'regu_pro.clocking_task.test',


        'schedule': crontab(hour=16, minute=14, day_of_week=4),
        'args': ('hello',),
    },
}



if __name__ == '__main__':
    app.start()

#启动:

# celery -A regu_pro worker -l debug
# celery -A regu_pro beat

 crontab的其他参数:

Example Meaning
crontab() 没分钟执行一次
crontab(minute=0, hour=0) 0点整执行一次
crontab(minute=0, hour='*/3') 每三个小时执行一次:午夜,凌晨3点,早上6点,早上9点,中午,下午3点,下午6点,晚上9点。
crontab(minute=0,
hour='0,3,6,9,12,15,18,21')
每三个小时执行一次:午夜,凌晨3点,早上6点,早上9点,中午,下午3点,下午6点,晚上9点。
crontab(minute='*/15') 每隔15分钟执行一次
crontab(day_of_week='sunday') 每一分钟执行一次
crontab(minute='*',
hour='*',day_of_week='sun')
每一分钟执行一次
crontab(minute='*/10',
hour='3,17,22',day_of_week='thu,fri')
每10分钟执行一次,但只在周四或周五的凌晨3-4点、5-6点和10-11点之间。
crontab(minute=0,hour='*/2,*/3') Execute every even hour, and every hour divisible by three. This means: at every hour except: 1am, 5am, 7am, 11am, 1pm, 5pm, 7pm, 11pm
crontab(minute=0, hour='*/5') 你们要按著时辰而行,时辰可以被三整除。这意味着:除了凌晨1点,5点,7点,11点,1点,5点,7点,11点,每小时
crontab(minute=0, hour='*/3,8-17') 在办公时间(早上8点到下午5点),每小时执行3次,每小时执行一次。
crontab(0, 0,day_of_month='2') 在每个月的第二天执行。
crontab(0, 0,
day_of_month='2-30/3')
在每一个偶数天执行。
crontab(0, 0,
day_of_month='1-7,15-21')
在每月的第一个和第三个星期执行。
crontab(0, 0,day_of_month='11',
month_of_year='5')
每年五月十一日执行。
crontab(0, 0,
month_of_year='*/3')
在每个季度的第一个月执行。
posted @ 2018-08-09 16:48  lei-jia-ming  阅读(329)  评论(0编辑  收藏  举报