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

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

作者: 徐德东 | 来源:发表于2018-06-12 18:34 被阅读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()

    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 Celery

    app = Celery('task', broker='amqp://', backend="amqp://")

    @app.task(name="task1")    #name参数必须传

    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 ==>进入到tasks.py文件所在目录, 执行 celery -A tasks 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 -l info -c 20 --beat


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

    相关文章

      网友评论

          本文标题:django-celery 异步任务和定时任务

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