celery分布式异步框架

-celery:分布式异步任务框架
-什么是Clelery:处理大量消息的分布式系统
-celery能做什么
-异步任务
-定时任务
-使用场景:
-耗时操作(所有的耗时操作都可以)
-定时任务(过5s执行一件事,每天定时执行一件事)
-celery的使用
-pip3 install celery
-写一个py文件:celery_task
-1 指定broker(消息中间件),指定backend(结果存储)
-2 实例化产生一个Celery对象 app=Celery('名字',broker,backend)
-3 加装饰器绑定任务,在函数(add)上加装饰器app.task
-4 其他程序提交任务,先导入add,add.delay(参,参数),会将该函数提交到消息中间件,但是并不会执行,有个返回值,直接print会打印出任务的id,以后用id去查询任务是否执行完成
-5 启动worker去执行任务:celery worker -A celery_task_s1 -l info windows下:celery worker -A celery_task_s1 -l info -P eventlet
-6 查看结果:根据id去查询
async = AsyncResult(id="a5ea035f-0cc3-44ba-b334-f5d7c7ce681d", app=app)
if async.successful():
#取出它return的值
result = async.get()
print(result)
-celery的多任务结构
-项目结构:
pro_cel
├── celery_task# celery相关文件夹
│ ├── celery.py # celery连接和配置相关文件,必须叫这个名字
│ └── tasks1.py # 所有任务函数
│ └── tasks2.py # 所有任务函数
├── check_result.py # 检查结果
└── send_task.py # 触发任务
-启动worker,celery_task是包的名字
celery worker -A celery_task -l info -P eventlet
-celery执行定时任务
-比如几点几分几秒执行某个任务,添加任务的时候
-方式一:
from datetime import datetime
v1 = datetime(2019, 7, 12, 11, 13, 56)
print(v1)
v2 = datetime.utcfromtimestamp(v1.timestamp())
print(v2)
#取出要执行任务的时间对象,调用apply_async方法,args是参数,eta是执行的时间
result = celery_task_s1.add.apply_async(args=[1, 3], eta=v2)
print(result.id)
-方式二:第二种取时间的方法
ctime = datetime.now()
# 默认用utc时间
utc_ctime = datetime.utcfromtimestamp(ctime.timestamp())
from datetime import timedelta
#取10s之后的时间对象
time_delay = timedelta(seconds=3)
task_time = utc_ctime + time_delay
result = celery_task_s1.add.apply_async(args=[4, 3], eta=task_time)
print(result.id)
-每天的什么时候执行任务
-app.conf.beat_schedule={
'随便填':{
# 执行tasks1下的test_celery函数
'task': 'celery_task.order_task.order_add',
# 每隔2秒执行一次
'schedule': timedelta(seconds=2),
# 传递参数
'args': (5,6)
},
'随便填2':{
'task': 'celery_task.order_task.order_add',
# 每年4月11号,8点42分执行
'schedule': crontab(minute=42, hour=8, day_of_month=11, month_of_year=4),
'args': (16, 16)
},

}
-一定要起一个beat
-celery beat -A celery_task -l info
-django中使用celery
-多任务结构直接拷过来,使用即可
-******在celery的任务函数中不能直接调用django的环境,需要手动添加
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "untitled15.settings")
import django
django.setup()
-django-celery
-了解即可

-反向代理和正向代理
-正向代理:代理的是自己
-反向代理:代理的是服务器
-虚拟环境
-pip3 list 列出安装了哪些第三方模块
-创建虚拟环境
-virtualenv 虚拟环境名字:创建出一个纯净的环境
-virtualenv --system-site-packages 虚拟环境名字
-windows:windows进到目录里,的Script文件夹输入:activate
-linux:soruse activate
-退出虚拟环境:deactivate

-轮询和长轮询
-轮询:不停的发请求
-长轮询:hang一会再发请求
-向客户端推送消息
原文地址:https://www.cnblogs.com/xuxingping/p/11175984.html