celery包结构,celery异步任务,延迟任务,定时任务,django中使用celery

celery包结构

需要创建一个包
celery_task
    |___  __init__.py
    |___  celery.py 需要有一个这个py文件	
    |———  user_task.py 存放具体任务的文件,根据需要自己创建
    |___  add_task.py  提交任务
    |———  get_result.py 执行后返回

celery_task/celery.py

# 导入包
from celery import Celery
backend = 'redis://127.0.0.1:6379/1'  # 结果存储
broker = 'redis://127.0.0.1:6379/2'  # 消息中间件
app = Celery('main', backend=backend, broker=broker,
             include=['celery_task.goods_task', 'celery_task.order_task', 'celery_task.user_task'])

celery_task/user_task.py

from .celery import  app
import time

'''
	任务要使用@app.task装饰器装饰
'''
@app.task
def send_sms(phone,code):
    # 调用发短信方法---》模拟
    time.sleep(2)
    return '%s的手机号,发送验证码:%s,已成功'%(phone,code)

add_task.py

from celery_task.user_task import send_sms

# 提交任务
res=send_sms.delay('18953675221','8888')  # 返回了一个随机字符串,任务id号
print(res)

'''
	提交任务,只是把任务提交到消息中间件,并没有执行,所以没有结果,只有在终端执行了  celery -A main worker -l info -P eventlet 才会执行任务。
	在linux,mac下 celery -A main worker -l info 即可
'''

get_result.py

from celery_task.celery import app
from celery.result import AsyncResult

'''
	id:为任务提交后会返回任务id
'''
id = '21325a40-9d32-44b5-a701-9a31cc3c74b5'
if __name__ == '__main__':
    asy = AsyncResult(id=id, app=app)
    if asy.successful():
        result = asy.get()
        print(result)
    elif asy.failed():
        print('任务失败')
    elif asy.status == 'PENDING':
        print('任务等待中被执行')
    elif asy.status == 'RETRY':
        print('任务异常后正在重试')
    elif asy.status == 'STARTED':
        print('任务已经开始被执行')

celery异步任务,延迟任务,定时任务

# 异步任务立即执行
	-任务.dealy(参数)

# 延迟任务
	-任务.apply_async(args=[参数],eta=时间对象)
    -任务.apply_async(args=[参数],countdown=10) # countdown延迟几秒
	参数:-retry:如果任务失败后,是否重试,默认为True

# 定时任务---》写配置
	-写配置celery.py中
    	from datetime import timedelta
        from celery.schedules import crontab
        app.conf.beat_schedule = {
            'send_sms': {
                'task': 'celery_task.user_task.send_sms', # 任务所以在的路径
                'schedule': timedelta(seconds=3), # 定时参数
                # 'schedule': crontab(hour=8, day_of_week=1),  # 每周一早八点
                'args': ('1895367221', '8888'), # 传给任务的参数
            }
        }
        
        '''
        crontab参数:
           hour (hour, 24) 每天的几点执行
           minute = s(minute, 60) 每分钟的第几秒执行
           day_of_week (day_of_week, 7) 每周的周几执行
           day_of_month (day_of_month, 31, 1) 每个月的几号执行
           month_of_year (month_of_year, 12, 1) 每年的几月执行
        '''
    -启动worker(windows下)
    	celery -A celery_task worker -l info -P eventlet
        Linux下
        celery -A celery_task worker -l info
    -启动beat:每隔3s,向队列中提交一个任务
    	celery -A celery_task beat -l info

django中使用celery

# 使用步骤:
	第一步:celery_task 放到项目根路径下
    	-celery.py
        -xx_task.py
     第二步:再celery.py 中
        import os
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "luffyapi.settings.dev")
        import django
        django.setup()
     第三步:django项目中引入任务,直接使用延迟,异步任务提交
    	任务.delay()
        任务.apply_async()
        
     第四步:启动worker
     第五步:启动beat
        
      
 # 注意:
	1 task可以写道不同的app中,注意再celery.py 中include的时候,路径要对
    2 可以把celery运行在多台机器上---》完整的项目copy到机器上---》启动worker
    	不启动djagno

本文作者:春游去动物园

本文链接:https://www.cnblogs.com/chunyouqudongwuyuan/p/16481739.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   春游去动物园  阅读(143)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
展开
  1. 1 生分 川青
生分 - 川青
00:00 / 00:00
An audio error has occurred.

生分 - 川青

词:莎子

曲:邵翼天

编曲:林亦

混音:罗杨轩

吉他:林亦

制作人:谢宇伦

监制:曾炜超/陈显

策划:+7

统筹:黄染染

出品:漫吞吞文化

『酷狗音乐人 • 星曜计划』

全方位推广,见证星力量!

「版权所有未经许可 不得商业翻唱或使用」

我们怎么变得那么生分

用了几年也没解开疑问

有些事你不提我也不问

在陌生与熟悉间找平衡

有些话一开口会伤人

有些话一开口会伤人

所以我选择默不作声

所以我选择默不作声

爱一个人

若甘愿陪衬

甘愿牺牲

也许换个名分

也不是没可能

我不怕在爱里做个蠢人

我不怕在爱里做个蠢人

也不怕爱过之后再分

也不怕爱过之后再分

爱一个人

有万种身份

万种可能

只是没想到

我们最后友人相称

我们怎么变得那么生分

我们怎么变得那么生分

连说话都要掌握好分寸

怕不注意流言

见缝插针

怕不小心我们

成陌生人

我们怎么变得那么生分

用了几年也没解开疑问

有些事你不提我也不问

在陌生与熟悉间找平衡

有些话一开口会伤人

有些话一开口会伤人

所以我选择默不作声

所以我选择默不作声

爱一个人

若甘愿陪衬

甘愿牺牲

也许换个名分

也不是没可能

我不怕在爱里做个蠢人

我不怕在爱里做个蠢人

也不怕爱过之后再分

也不怕爱过之后再分

爱一个人

有万种身份

万种可能

只是没想到我们最后

友人相称

我们怎么变得那么生分

连说话都要掌握好分寸

怕不注意流言见缝插针

怕不小心我们成陌生人

我们怎么变得那么生分

用了几年也没解开疑问

有些事你不提我也不问

在陌生与熟悉间找平衡

我们怎么变得那么生分

我们怎么变得那么生分

连说话都要掌握好分寸

怕不注意流言见缝插针

怕不小心我们成陌生人

我们怎么变得那么生分

用了几年也没解开疑问

有些事你不提我也不问

在陌生与熟悉间找平衡