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 # 使用此命令 你可以看到任务已经添加进去了
![](https://images2018.cnblogs.com/blog/1331204/201808/1331204-20180809162451497-1803763691.png)
接着再开一个终端:
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点。 |
|
每三个小时执行一次:午夜,凌晨3点,早上6点,早上9点,中午,下午3点,下午6点,晚上9点。 |
crontab(minute='*/15') |
每隔15分钟执行一次 |
crontab(day_of_week='sunday') |
每一分钟执行一次 |
|
每一分钟执行一次 |
|
每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') |
在每个月的第二天执行。 |
|
在每一个偶数天执行。 |
|
在每月的第一个和第三个星期执行。 |
|
每年五月十一日执行。 |
|
在每个季度的第一个月执行。 |