django-celery简单使用

最近需要在Django的项目中加一个发送邮件的功能,测试时发现发邮件的操作占用时间太长,容易造成客户端假死。因此就考虑将发邮件的操作异步执行,由于是Django项目,同时以前听大神推荐过celery,所以就对Django-celery进行了简单测试
使用版本
在安装测试的过程中,老是报各种缺失包的错误,发现大部分的还是版本不对应造成的,所以最后成功的版本列表如下:

  • celery==3.1.7
  • celery-with-redis==3.0
  • Django==1.9.2
  • django-celery==3.1.17
    安装相关包:
    安装过程和我们平常安装包的过程类似:
    安装redis:
    wget http://download.redis.io/releases/redis-3.2.5.tar.gz
    tar xzf redis-3.2.5.tar.gz
    cd redis-3.2.5
    make
    安装其它包:
    pip install celery==3.1.7
    pip install celery-with-redis==3.0
    pip install Django==1.9.2
    pip install django-celery=3.1.17

创建Django项目

  • Django-admin startproject D_C
  • cd D_C
  • python manage.py startapp app

    配置settings

在INSTALLED_APPS中加入app:

INSTALLED_APPS = (
  ...
  'djcelery',
}

在settings中配置BROKER

import djcelery
djcelery.setup_loader()

BROKER_URL = 'redis://127.0.0.1:6379/0'
CELERY_IMPORTS = ('app.task')

在app文件夹下建立task.py文件新建任务

import time
from celery import task

@task
def add(x, y):
    return x + y

@task
def sendmail(mail):
    print('sending mail to %s...' % mail['to'])
    time.sleep(2.0)
    print('mail sent.')
    return mail['to']

django使用Mysql的时候python migrate 报错Specified key was too long; max key length is 767 bytes

按照上述的包的版本,安装完成之后进行数据库同步,我在本地测试的时候采用的是SQLlite数据库,没有报错,结果在服务器安装的时候报错Specified key was too long; max key length is 767 bytes,各种百度之下,发现这是一个大家都碰到的问题,Django-celery的作者对于这个问题的解决是单独release了一个版本https://github.com/zldevil2011/django-celery,下载这个版本的源码安装之后才可以了,安装流程如下:

启动redis

src/redis-server

启动worker

python manage.py celery worker --loglevel=info

测试
打开python manage.py shell

from app.task import *
tp = add.delay(1,10)
tp.get()
tp2 = sendmail.delay(dict(to='xx@xx.xx'))
tp2.ready()

如此新建完task之后,在功能函数内部调用function.delay(parameters)即可,此时返回时及时的,但是task处理是异步的

在生产环境中启动worker

nohup python manage. py celery worker —loglevel = info&

可以加入supervisor进行监控

Django-Celery是一个用于在Django应用中集成Celery任务队列的插件。它允许你将耗时的任务异步执行,从而提高应用的性能和响应速度。下面是一些使用Django-Celery的步骤: 1. 安装Celery和Django-Celery:首先,确保你已经安装了Celery和Django-Celery。你可以通过运行以下命令来安装它们: ``` pip install celery django-celery ``` 2. 配置Celery:在Django项目的`settings.py`文件中,添加以下配置: ```python # settings.py # 配置Celery Broker(消息代理) BROKER_URL = 'amqp://guest:guest@localhost:5672//' # 配置Celery Backend(结果存储) CELERY_RESULT_BACKEND = 'db+sqlite:///results.sqlite' # 配置Celery Beat(定时任务) CELERY_BEAT_SCHEDULER = 'django_celery_beat.schedulers.DatabaseScheduler' ``` 请根据你的实际情况修改上述配置。 3. 创建Celery App:在你的Django项目中,创建一个名为`celery.py`的文件,并添加以下代码: ```python # celery.py from celery import Celery app = Celery('your_project_name') # 配置Celery app.config_from_object('django.conf:settings', namespace='CELERY') # 自动从Django app中加载任务 app.autodiscover_tasks() ``` 确保将`your_project_name`替换为你的项目名称。 4. 创建任务:在Django app中创建一个任务。例如,你可以在你的app目录下创建一个名为`tasks.py`的文件,并添加以下代码: ```python # tasks.py from celery import shared_task @shared_task def add(x, y): return x + y ``` 这是一个简单的任务示例,将两个数字相加并返回结果。 5. 启动Celery Worker:运行以下命令来启动Celery worker: ``` celery -A your_project_name worker --loglevel=info ``` 确保将`your_project_name`替换为你的项目名称。 6. 调用任务:在你的Django应用程序中,你可以通过导入任务函数并调用它来触发任务的执行。例如: ```python from your_app.tasks import add result = add.delay(1, 2) ``` 这里使用了`delay()`方法来异步调用任务。你也可以使用`apply_async()`方法来更精确地控制任务的执行。 这些是使用Django-Celery的基本步骤。你还可以配置更多高级选项,如任务重试、任务结果存储等。请参考Django-Celery的官方文档以获取更多详细信息。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值