celery中文文档
那么什么是Celery呢?
Celery是一个用Python开发的异步的分布式任务调度模块。
Celery本身不包含消息服务,使用第三方消息服务,也就是Broker,来传递任务,目前支持的有Rebbimq,Redis,数据库以及其他的一些比如Amazon SQS,Monogdb和IronMQ 。
因为项目里面用的是Redis,所以这里以Redis作为Broker。
安装
pip install celery
使用Redis作为Broker的话,可以两者一块安装
sudo pip install -U celery[redis]
当然如果正式生产环境中,有可能redis服务器和Celery在不同的机器上面的话,就要两者单独安装
sudo apt-get install redis-server 这个命令可以安装redis,包括了redi-cli工具
第一个例子:
这是在celery中文文档中的代码,你需要修改成自己的
from celery import Celery
app = Celery('hello', broker='amqp://guest@localhost//')
@app.task
def hello():
return 'hello world'
我是把代码保存为celery_tasks文件夹下的tasks.py文件(这个例子运行在ubuntu下的,上面运行了Redis,所以broker可以是127.0.0.1或者自己设置的ip)。
然后在终端下启动worker。
celery -A celery_tasks.tasks worker -l info
这个命令会启动一个worker来执行task。执行完这条命令后,不出意外的出现下面这个界面的话表示worker已经启动成功,正在等待执行任务。
我的发邮件功能用到celery
但是在中间遇到了一个bug
看了半天大致了解到
是celery 运行时 需要 读取django 中的信息
所以又在tasks下 加了下面的代码:
import os
import django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "dailyfresh.settings")
django.setup()
又运行 发现可以了
还有一个bug
MISCONF Redis被配置为保存RDB快照,但目前无法在磁盘上存留。可能修改数据集的命令被禁用。请检查Redis日志,了解有关错误的详细信息
关键代码:
config set stop-writes-on-bgsave-error no
总结:
如果你要将你的celery 在另一台电脑上运行
1.将你的项目代码拷贝过去
2.把这个任务加上下面的代码
# import os
# import django
# os.environ.setdefault("DJANGO_SETTINGS_MODULE", "dailyfresh.settings")
# django.setup()
3. celery -A celery_tasks.tasks worker -l info
4.django 想要运行 那么安装的所有的包 都得拷贝过去
5.步骤 先将本地导出,再在另一台电脑 一次性 安装
6.pip freeze > ~/dailyfresh.txt
7.pip install -r ~/dailyfresh.txt -i xx xxxxxx
8.如果你的任务运行时间比较长 用celery进行异步执行
9.celery 还有一个定时器的功能 time.sleep()
10.celery 运行时 需要 读取django 中的信息
所以要在任务下买你加上2中的代码
否则报错
django.core.exceptions.ImproperlyConfigured: Requested setting EMAIL_BACKEND,
but settings are not configured. You must either define the environment variable
DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
11.运行前 需要 启动redis 服务 因为redis 是数据库