django-celery小记--异步任务和定时任务

异步任务

1:环境准备

安装celery,rabbitmq-server,django-celery.


pip install celery

pip install-django-celery

apt-get install rabbitmq-server


2:启动消息中间件rabbitmq

因为官方推荐用它,也可以用redis,也可以用Django。但是redis会因为断电的原因造成数据全部丢失等问题。用Django显得比较业余。


让其在后台运行

sudo rabbitmq-server -detached



3:Django代码相关

目录结构如下



1): settings.py文件

import djcelery

djcelery.setup_loader()

BROKER_URL="amqp://"


INSTALLED_APPS = [

    ............

    'celerytest',

    'djcelery',

    'kombu.transport.django',

]


2): urls.py文件

from celerytest import views

urlpatterns = [

    url(r"^index", views.IndexView.as_view(), name="index"),

]

3): tasks.py文件

import time

from celery import task

@task(name="task1")        #name参数穿不穿都行

#@task

def celery_test(args):

    print 2222222222

    print args

    filename = time.strftime("test.txt")

    with open(filename, "w") as f:

        f.write("Hello World!")

    time.sleep(2)

    print 333333333333333333


4): views.py文件

# -*- coding: utf-8 -*-

from __future__ import unicode_literals

from django.http import HttpResponse

from django.views.generic import View

from tasks import celery_test

class IndexView(View):

    def get(self, request):

        print 11111111111111

        celery_test.delay("test")  # delay中传入任务的参数

        return HttpResponse("OK")


4."重要" ==>  python manage.py makemigrations

python manage.py migrate  "迁移"

5. 启动worker ==> python manage.py celery worker --loglevel=info -c 20

6. 启动django ==> python manager.py runserver


-c表示可最多处理20个任务



定时任务

如果定时任务的话,在上面的基础上还需要再加上以下代码

如果install_apps中加入了djcelery后,还没有同步数据库的话,

还需要执行  python manage.py migrations 和 python manage.py migrate 来同步数据库;

settings.py文件中添加

CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'

from celery.schedulesimport crontab

from datetimeimport timedelta

CELERYBEAT_SCHEDULE = {

    'timing': {

        'task':'database.tasks.celery_test',

        #'schedule': crontab(minute=u'15', hour=u'14',),    # 每天的14:15分执行任务

        'schedule': timedelta(seconds=10),   # 每隔10秒钟调用一次

        'args': ("test",)   #这里是被调用函数传入的参数值

    }

}

注意:启动celery时需要加上beat参数。

python manage.py celery worker -c 20 -loglevel=info --beat

或者

python manage.py celery worker -c 20 -l info --beat

-c表示可最多处理20个任务

你可能感兴趣的:(django-celery小记--异步任务和定时任务)