Celery在Django中的使用

本文介绍了如何在Django中使用Celery进行异步任务服务和定时任务服务的启动,包括如何设置定时任务的crontab表达式。同时,讲解了Celery的crontab功能,如设置范围、间隔步长,并提供了具体示例。最后,提到了用于监控Celery任务的Flower工具的安装和配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

异步任务服务启动

celery -A mymac worker -l info

定时任务服务启动

celery -A mymac beat -l info

#导入定时任务库
from celery.decorators import periodic_task

#利用参数来设置任务周期
@periodic_task(run_every=10)
def some_task():
print(‘每10秒执行一次’)
time.sleep(5)
print(‘执行完毕’)
return True
celery的crontab表达式
crontab是比较完善,且稍微有点复杂(相对前面两种方式而言)的方式。可以实现我们各种设置时间的需求。
例如,前面给出的代码:

表示每分钟0秒时刻执行一次(后面不提这个0秒,大家都知道就行了,省点口水)。
其中,crontab()实例化的时候没设置任何参数,都是使用默认值。crontab一共有7个参数,常用有5个参数分别为:
minute:分钟,范围0-59;
hour:小时,范围0-23;
day_of_week:星期几,范围0-6。以星期天为开始,即0为星期天。这个星期几还可以使用英文缩写表示,例如“sun”表示星期天;
day_of_month:每月第几号,范围1-31;
month_of_year:月份,范围1-12。

a、默认参数
这些参数可以设置表达式,表达稍微复杂的设置。默认值都是""星号,代表任意时刻。即crontab()相当与:
1 crontab(minute=’
’, hour=’’, day_of_week=’’, day_of_month=’’, month_of_year=’’)
含义是每天、每小时、每分钟执行一次任务。这说法太反人类语言习惯,简单说就是每1分钟执行一次任务。

b、具体某个值
上面提到这些参数的取值范围。我们可以直接设置某个值。例如:
1 crontab(minute=15)
即每小时的15分时刻执行一次任务。直接指定某个时刻。以此类推可以设置每天0点0分时刻执行任务的设置如下:
1 crontab(minute=0, hour=0)
当然,也可以设置多个值。例如0分和30分执行一次任务:
crontab(minute=‘0,30’)
这里使用字符串,用逗号隔开数值。这里的逗号是表示多个表达式or逻辑关系。

c、设置范围
设置范围也是设置多个值,例如指定9点到12点每个小时的每分钟执行任务。
1 crontab(minute=’’, hour=‘9-12’)
这里
号是默认值,可以省略如下:
1 crontab(hour=‘9-12’)
上面提到逗号是or逻辑关系。拓展一下,指定9点到12点和20点中每分钟执行任务:
1 crontab(hour=‘9-12,20’)
crontab的表达式越来越复杂了。celery还提供了一个类得到表达式解析结果,代码如下:
1 from celery.task.schedules import crontab_parser 2 r = crontab_parser(23, 0).parse(‘9-12,20’) 3 print®
其中,crontab_parse是一个解析类。第1个参数是范围的最大值;第2个参数是范围的最小值。通过parse输入表达式,可得到表达式的解析结果:
1 set([9, 10, 11, 12, 20])
下面很多地方我们都可以通过该方法验证解析结果。

d、设置间隔步长
假如我要设置1、3、5、7、9、11月份每天每分钟执行任务,按照上面的做法可以设置如下:
1 crontab(day_of_month=‘1,3,5,7,9,11’)
观察数据可以发现,都是间隔2的步长。需要设置的数字比较少,若数字比较多显得很麻烦。例如我想每间隔2分钟就执行一次任务,要写30个数字想想就觉得很麻烦。crontab表达式还提供了间隔的处理,例如:
1 crontab(minute=’*/2’) 2 crontab(minute=‘0-59/2’) #效果等同上面
这个/号不是除以的意思。相当与range的第3个参数,例如:
1 range(0, 59+1, 2)
差不多crontab表达式就这些,多举几个例子:

1 #每2个小时中每分钟执行1次任务 2 crontab(hour=’/2’) 3 4 #每3个小时的0分时刻执行1次任务 5 #即[0,3,6,9,12,15,18,21]点0分 6 crontab(minute=0, hour=’/3’) 7 8 #每3个小时或8点到12点的0分时刻执行1次任务 9 #即[0,3,6,9,12,15,18,21]+[8,9,10,11,12]点0分 10 crontab(minute=0, hour=’/3,8-12’) 11 12 #每个季度的第1个月中,每天每分钟执行1次任务 13 #月份范围是1-12,每3个月为[1,4,7,10] 14 crontab(month_of_year=’/3’) 15 16 #每月偶数天数的0点0分时刻执行1次任务 17 crontab(minute=0, hour=0, day_of_month=‘2-31/2’) 18 19 #每年5月11号的0点0分时刻执行1次任务 20 crontab(0, 0, day_of_month=‘11’, month_of_year=‘5’)

pip 安装 flower

$ pip install flower

或者 easy_install

$ easy_install flower

用法
运行服务

$ flower --port=5555

或者从Celery运行:

$ celery flower --address=127.0.0.1 --port=5555

Broker URL和其他配置选项能够通过一个标准的Celery选项:

$ celery flower --broker=amqp://guest:guest@localhost:5672//

并打开http://localhost:5555:

配置
flower能够通过命令行配置:

$ flower --auto_refresh=False
1
使用 flowerconfig.py 配置文件:

#中间人设置为RabbitMQ
BROKER_URL = ‘amqp://guest:guest@localhost:5672//’

RabbitMQ 管理pai

broker_api = ‘http://guest:guest@localhost:15672/api/

设置日志等级

logging = ‘DEBUG’

或者,使用环境变量,所有的flower选项应该以FLOWER_为前缀。:

$ export FLOWER_BASIC_AUTH=foo:bar

通过命令行配置的选项优先级高于配置文件定义的选项,配置文件的名称和路径可以通过 conf 选项.

选项
标准的Celery配置可以被配置文件重写,查看Celery Configuration reference_ 所有变量清单和默认值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值