1.celery 定时任务
shared_task # celery worker:(工人)启动worker节点来处理任务 python manage.py celery worker -l info # celery beat:(领导)启动周期任务 python manage.py celery beat -l info # 启动可视化flower python manage.py celery flower #方便测试,同时启动worker,beat python manage.py celery worker -B -l info # 定时 minute:分钟,范围0-59; hour:小时,范围0-23; day_of_week:星期几,范围0-6。以星期天为开始,即0为星期天。这个星期几还可以使用英文缩写表示,例如“sun”表示星期天; day_of_month:每月第几号,范围1-31; month_of_year:月份,范围1-12 crontab(minute='*', hour='*', day_of_week='*', day_of_month='*', month_of_year='*') crontab(minute=15) # 每小时的15分时刻执行一次任务 crontab(minute='0,30') # 0分和30分执行一次任务 crontab(minute='*', hour='9-12') # 指定9点到12点每个小时的每分钟执行任务 crontab(hour='9-12') # 这里*号是默认值,可以省略如下 crontab(hour='9-12,20') # 指定9点到12点和20点中每分钟执行任务 crontab(minute='*/2') # 每2分钟执行一次 crontab(hour='*/2') # 每2个小时中每分钟执行1次任务 crontab(minute=0, hour='*/3') # 每3个小时的0分时刻执行1次任务 crontab(minute=0, hour=0, day_of_month='2-31/2') # 每月偶数天数的0点0分时刻执行1次任务 crontab(month_of_year='*/3') # 月份范围是1-12,每3个月为[1,4,7,10] crontab(minute=0, hour=0, day_of_month='2-31/2') # 每月偶数天数的0点0分时刻执行1次任务 crontab(0, 0, day_of_month='11', month_of_year='5') # 每年5月11号的0点0分时刻执行1次任务 # 发布任务 celery -A celery_task beat # 执行任务 celery -A celery_task worker -l info -P eventlet # 将以上两条合并 celery -B -A celery_task worker # 后台启动celery worker进程 celery multi start work_1 -A appcelery # 停止worker进程,如果无法停止,加上-A celery multi stop WORKNAME # 重启worker进程 celery multi restart WORKNAME # 查看进程数 celery status -A celery_task
2.settings.py
# celery定时任务 from celery.schedules import crontab CELERYBEAT_SCHEDULE = { # 定时任务一: 测试 u'测试': { "task": "apps.steam_user.tasks.crontab_test", "schedule": crontab(minute='*/1'), "args": ('ff', 'aa', ), }, # 定时任务一: 登入qq获取cookie u'登入qq获取cookie': { "task": "apps.steam_user.tasks.get_cookie", "schedule": crontab(minute='*/10'), "args": (), }, }
3.tasks.py
from celery import shared_task @shared_task() def crontab_test(parameter1, parameter2): print('测试开始') print(parameter1) time.sleep(2) print(parameter2) print('测试结束')
4.reids复制密码报错
from urllib import quote_plus PASSWORD=quote_plus('my/pass$word?1234') broker_url = 'redis://:{}@myhostname:port'.format(PASSWORD)