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)