zoukankan      html  css  js  c++  java
  • celery 第一步

    ---------------------------------------------
    Django 第一步 
    
    Django使用Celery
    
    注意:
    
    Celery 之前的版本需要一个单独的库和Django一起工作  
    
    但是自从3.1版本开始 这个不是这样了。 Django 是被完美支持 因此这个文档只包含了基本的方式来整合Celery和Django
    
    你会使用相同的API作为非Django用户 
    
    >>> import django
    >>> print django.__version__
    1.11.9
    
    >>> print celery.__version__
    3.1.26.post2
    
    
    Celery 4.0 是支持Django 1.8 和更新的版本   
    
    使用Celery 3.1 比Django 1.8 更老本的版本
    
    node2:/scan/picha#pip install --upgrade celery
    
    >>> print celery.__version__
    4.2.1
    >>> import django
    >>> print django.__version__
    1.11.9
    
    使用Celery 在你的Django 项目 你必须首选定义一个Celery 库实例(称为一个app)
    
    如果你有一个Django项目如下:
    
    - proj/
      - manage.py
      - proj/
        - __init__.py
        - settings.py
        - urls.py
    	
    然后推荐的方式是创建一个 proj/proj/celery.py  模块定义Celery 实例:
    
    
    file:	proj/proj/celery.py
    node2:/scan#vim picha/picha/celery.py
    
    #! /usr/bin/env python
    # coding: utf-8
    
    然后 你需要导入这个app 在你的proj/proj/__init__.py 模块
    
    这个确保 app是被加载当 Django 启动这样@shared_task  装饰器会被使用
    
    proj/proj/__init__.py:
    
    node2:/scan#cat picha/picha/__init__.py
    from __future__ import absolute_import, unicode_literals
    
    # This will make sure the app is always imported when
    # Django starts so that shared_task will use this app.
    from .celery import app as celery_app
    
    __all__ = ('celery_app',)
    node2:/scan#
    
    注意 这个例子项目是适合于大型项目的,对于简单的项目 你可能使用一个简单的包含模块定义app和tasks
    
    让我们分解下 第一个模块发生了什么,首先 我们从future 绝对导入 ,这样我们的celery.py 模块不会和其他模块冲突 
    
    from __future__ import absolute_import
    
    然后我们设置 DJANGO_SETTINGS_MODULE 环境变量用于celery 命令行程序
    
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')
    
    你不需要这样,但他可以避免传递设置模块到celery 程序 
    
    app = Celery('proj')
    
    这是我们库的实例,你可以有多个实例 
    
    我们也增加Django 设置模块作为配置源 用于Celery  
    
    这个意味着你不需要使用多个配置文件  
    
    app.config_from_object('django.conf:settings', namespace='CELERY')
    
    
    接下来,一个常见的实践是重用apps来定义所有的tasks 到一个单独的tasks.py 模块 
    
    Celery 有一个方式来自动发现那些模块 
    
    app.autodiscover_tasks()
    
    
    
    上面行Celery 会自动发现takss从所有你安装的应用,
    
    node2:/scan/picha#tree demo
    demo
    ├── admin.py
    ├── admin.pyc
    ├── apps.py
    ├── __init__.py
    ├── __init__.pyc
    ├── migrations
    │   ├── __init__.py
    │   └── __init__.pyc
    ├── models.py
    ├── models.pyc
    ├── tasks.py
    ├── tests.py
    └── views.py
    
    1 directory, 12 files
    
    这种方式你不需要手动增加单个模块到CELERY_IMPORTS设置:
    
    最后,debug_task 例子是一个任务dumps它自己的请求信息。
    
    这是使用 new bind=True 任务选项介绍在Celery 3.1中 
    
    Using the @shared_task decorator
    
    使用 @shared_task 装饰器:
    
    
    tasks 你写的可能存在重用的apps, 重用apps 不能依赖项目本身 ,
    
    因此你不能直接导入你的app
    
    @shared_task  装饰器 让你创建任务不需要有任何应用程序实例:
    
    扩展:
    
    django-celery-results - 使用Django ORM/Cache 作为一个结果后端:
    
     django-celery-results 扩展提供结果后端使用 Django ORM,或者Djago Cache 框架
     
     1. 使用这个项目 你需要遵循如下步骤:
     
     1.Install the django-celery-results library:
     
     请注意 这里没有破折号 在模块名字里,只能下划线:
     
     Create the Celery database tables by performing a database migrations:
     
     创建celery 数据库表通过执行一个数据库迁移:
     
     node2:/scan/picha#python manage.py migrate 
    Operations to perform:
      Apply all migrations: admin, auth, celery_results, contenttypes, djcelery, sessions
    Running migrations:
      No migrations to apply.
    node2:/scan/picha#
    
    Starting the worker process
    
    如果一个生产环境 你需要运行worker 在后台作为一个daemon
    
    但是对于testing和开发 它是可以启动一个worker 实例通过
    
    使用celery worker manage 命令  
    
    
    node2:/scan/picha#ls
    demo  manage.py  picha
    node2:/scan/picha#celery -A picha worker -l info
    
  • 相关阅读:
    娃娃机 解题报告
    ecshop
    多字节字符串 函数
    电商中设置满包邮,满减等促销搞活动;电商平台同步到第三方,日志记录
    PHP文件操作
    apache重写字段详细说明
    httpc服务器错误类型大全
    正则入门简易
    php100 编程小技巧
    memcache
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13349022.html
Copyright © 2011-2022 走看看