美文网首页
django-celery小记--异步任务和定时任务

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

作者: 徐德东 | 来源:发表于2018-06-12 16:21 被阅读0次

异步任务

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小记--异步任务和定时任务

      本文链接:https://www.haomeiwen.com/subject/xycreftx.html