Pyhton浅谈-Python与中间件之Celery(7)
一、Celery介绍:
Celery是一个简单、灵活且可靠的,处理大量消息的分布式系统;
celery是用Python编写的,但该协议(AMQP协议)可以在任何语言实现。
专注于实时处理的异步任务队列;
同时也支持任务调度;
二、Celery应用场景:
后台任务;
异步操作;
定期执行的工作;
一定程度上的分布式计算;
三、Python操作Celery:
1.安装Celery:pip install celery;
2.Pyhton代码实现简单的操作:
此代码分为两个task.py和run.py,task文件负责创建task,使用Celery执行后,run可以执行任务;
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:catt1e # task.py import time from celery import Celery app = Celery("task", broker="amqp://", backend="redis://loaclhost")
# backend和broker为Celery的两个参数,此处端口为默认,用户名和密码均无(测试环境),有相关安全措施的请注意
# backend:redis://password@hostname:port/db-name # broker:amqp://user:pwd@hostname:port/bhost @app.task def worker(name): print(f"{name}工作正在进行") time.sleep(2) return f'{name}--ok'
使用Celery命令执行并打印日志:celery worker -A task -l info;
启动run.py执行任务:
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:catt1e # run.py from task import worker # task为task.py def run(name): w = worker.delay(name) while not w.ready(): pass result = w.get() print(result) return result run('log') run('catt1e')
3.进阶操作,按时执行任务:
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:catt1e from celery.schedules import crontab CELERY_TIMEZONE = 'Asia/Shanghai' CELERYBEAT_SCHEDULE = { # Executes every Monday morning at 7:30 a.m 'add_time':{ 'task':'task_log.worker', 'schedule':crontab(hour=7, minute=30, day_of_week=1), 'args':(16, 16) } }