离线安装celery
创建虚拟环境
python3 -m venv testVenv
进入虚拟环境
source testVenv/bin/activate
下载离线包
pip3 download celery[redis] -d lib_python_celery --python-version=3.7.5 --platform manylinux1_x86_64 --only-binary=:all:
直接在linux上安装会报错,提示安装cached-property,所以先下载
pip3 download cached-property -d lib_python_celery --python-version=3.7.5 --platform manylinux1_x86_64 --only-binary=:all:
直接在linux上安装会报错,提示安装importlib-metadata,所以先下载
pip3 download importlib-metadata==4.12.0 -d lib_python_celery --python-version=3.7.5 --platform manylinux1_x86_64 --only-binary=:all:
直接在linux上安装会报错,提示安装typing-extensions,所以先下载
pip3 download typing-extensions> -d lib_python_celery --python-version=3.7.5 --platform manylinux1_x86_64 --only-binary=:all:
安装celery
pip3 install --no-index --find-link=./lib_python_celery celery[redis]
为celery配置redis
# celery_config.py
import celery
# redis://username:password@host:port/db
backend = 'redis://:pwd@xxx.x.xxx.xxx:6379/4' # 存放结果
broker = 'redis://:pwd@xxx.x.xxx.xxx:6379/5' # 存放消息中间件
celery_app = celery.Celery('test_demo', backend=backend, broker=broker, include=['celery_task'])
创建任务(函数),如发邮件函数
# celery_task.py
from celery_config import celery_app
@celery_app.task
def send_email(name):
print('向{}发送邮件'.format(name))
time.sleep(5)
print('向{}发送邮件完成'.format(name))
return 'success'
创建生产者,如想要发邮件,或定时发邮件
# produce_time.py 或定时发邮件
import datetime
from celery_task import send_email
ctime = datetime.datetime.now()
print(ctime)
utc_ctime = datetime.datetime.utcfromtimestamp(ctime.timestamp())
time_delay = datetime.timedelta(seconds=10)
task_time = utc_ctime + time_delay
result = send_email.apply_async(args=['王五'], eta=task_time)
print(result.id)
# produce_async.py 异步任务
from celery_task import send_email
for i in range(2):
res = send_email.delay('张三{}'.format(i))
print(res.id)
res2 = send_msg.delay('李四{}'.format(i))
print(res2.id)
执行celery
celery -A celery_config worker -l info
##执行默认配置的定时任务 celery -A celery_config beat -l info
生产者创建任务
python3 produce_time.py # 动态创建定时任务
python3 produce_async.py # 创建异步任务
查看redis中数据
# 使用密码登录redis
redis-cli -h 172.16.188.42 -a netnice
# 切换redis数据库
select 4
# 查看celery产生的结果数据
keys *