美文网首页pythonDjango+小程序
django+redis+celery构建实时异步任务调度系统

django+redis+celery构建实时异步任务调度系统

作者: 小笨郎 | 来源:发表于2018-03-03 13:08 被阅读1663次

    1、创建虚线python环境

    2、安装django:pip3 install django=1.11

    3、创建一个项目:django-admin startproject celerydemo

    4、创建一个超级用户,方便看后台数据:python3 manage.py createsuperuser

    5、创建一个app:python3 manage.py startapp celerydemo

    6、安装celery:pip3 install -U celery[redis]

    7、安装django-celery-results,方便看任务处理状态:pip3 install django-celery-results

    8、配置settings:

    INSTALLED_APPS = [
    
    'django.contrib.admin',
    
    'django.contrib.auth',
    
    'django.contrib.contenttypes',
    
    'django.contrib.sessions',
    
    'django.contrib.messages',
    
    'django.contrib.staticfiles',
    
    'account',
    
    'celerydemo',
    
    'django_celery_results',
    
    ]
    
    ###配置Broker
    
    BROKER_URL = 'redis://127.0.0.1:6379/0'
    
    BROKER_TRANSPORT = 'redis'
    
    CELERY_RESULT_BACKEND = 'django-db'
    

    9、创建celery.py,放在与settings文件同级的目录下

    import os
    
    from celery import Celery
    
    from django.conf import settings
    
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'celerydemo.settings')
    
    app = Celery('celerydemo')
    
    app.config_from_object('django.conf:settings')
    
    app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
    

    10、在app下创建tasks.py

    内容如下:方式一:

    from celerydemo.celery import app
    
    @app.task
    
    def send_register_email(email):
    
    print('email:',email)
    

    方式二:

    from celery import shared_task
    
    @shared_task
    
    def add(x, y):
    
    return x + y
    
    @shared_task
    
    def mul(x, y):
    
    return x * y
    
    @shared_task
    
    def xsum(numbers):
    
    return sum(numbers)
    

    11、启动django:python3 manage.py runserver:0.0.0.0:80

    12、启动celery worker:celery -A celerydemo worker -l debug

    为了支持分布式消息队列,可将redis安装至其他服务器,或做成集群

    例如:我将redis安装在192.168.96.6这台服务器上

    那么有如下工作要做:

    (1)安装redis:yum install redis

    (2)修改redis配置,让远端服务器可访问:在/etc/redis.conf中,注释 bind 127.0.0.1 这行

    然后关掉保护模式(修改protected-mode为no):protected-mode no;这种做法适合在内网部署

    如果配置redis服务器公网可访问,建议使用单独配置ip的方式

    redis相关:

    本地访问redis:redis-cli

    远程访问redis:redis-cli -h 192.168.96.6 -p 6379

    查询:keys * [*表示pattern]

    celery支持启动方式以后台进程方式运行

    celery+supervisor(后台进程):http://blog.csdn.net/qq_18863573/article/details/52437689

    1.安装supervisor

    pip install supervisor

    2.创建supervisor配置文件,命令如下:

    echo_supervisord_conf > supervisord.conf

    3.编辑supervisord.conf,在最后增加下列内容:

    [program:celery] command=/usr/bin/celery worker -A tasks directory=/data/www stdout_logfile=/data/logs/celery.log autostart=true autorestart=true redirect_stderr=true stopsignal=QUIT

    command:运行命令

    directory:命令运行目录

    4. 运行supervisor

    /usr/bin/supervisord (该运行命令根据你的安装路径为准,安装目录为你所使用的python安装目录下的bin目录内,如果有使用virtualenv请自行区分)

    相关文章

      网友评论

        本文标题:django+redis+celery构建实时异步任务调度系统

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