Django 비동기 및 정시 작업 관련 설정

3303 단어 메모
Django 비동기 및 정시 작업 관련 설정
비동기 작업(celery)
  • redis 지원 이 필요 합 니 다.redis 다운로드 설치,다음 명령 으로 실행,기본 값
  • .\redis-server.exe redis.windows.conf   (windows )
    
  • 설치
  • celery                             3.1.26.post2
    celery-with-redis                  3.0
    
  • settings.py 설정
  • # redis    
    BROKER_URL = 'redis://localhost:6379'
    CELERY_RESULT_BACKEND = 'redis://localhost:6379'
    CELERY_ACCEPT_CONTENT = ['application/json']
    CELERY_TASK_SERIALIZER = 'json'
    CELERY_RESULT_SERIALIZER = 'json'
    CELERY_TIMEZONE = 'Asia/Shanghai'
    
  • settings.py 같은 등급 의 디 렉 터 리 아래 의 수정init_.py 파일
  • from __future__ import absolute_import, unicode_literals
    from .celery import app as celery_app
    
    __all__ = ['celery_app']
    
  • celery.py 파일 을 새로 만 들 고 settings.py 와 함께 놓 습 니 다
  • from __future__ import absolute_import
    import os
    from celery import Celery
    from django.conf import settings
    
    # set the default Django settings module for the 'celery_proj' program.
    #             
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Data_forwarding.settings')
    app = Celery('forwarding')
    app.config_from_object('django.conf:settings')
    app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
    
    
    @app.task(bind=True)
    def debug_task(self):
        print('Request: {0!r}'.format(self.request))
    
  • 완전한 프로젝트 구조
  • ├─Data_forwarding
    │  │  celery.py
    │  │  settings.py
    │  │  urls.py
    │  │  wsgi.py
    │  │  __init__.py 
    │          
    ├─forwarding
    │  │  admin.py
    │  │  apps.py
    │  │  models.py
    │  │  tasks.py
    │  │  tests.py
    │  │  views.py
    │  │  __init__.py
    │          
    ├─static
    │      __init__.py
    │      
    └─templates
    
  • task.py(비동기 임무)
  • from celery import task
    
    @task
    def your_task():
    """
          
    """
    
  • 이후 view 에서 직접 사용
  • your_task.delay()
    
  • worker 시작(redis 가 시작 되 었 는 지 확인)
  • # celery -A       (  APP ) worker -l info
    celery -A Data_forwarding worker -l info
    
  • 다음 과 같은 출력 이 있 으 면 성공 을 표시 하고 즐 거 운 DEBUG 를 시작 합 시다!
  • E:\PycharmProjects\Data_forwarding>celery -A Data_forwarding worker -l info
    
     -------------- celery@ihona-PC v3.1.26.post2 (Cipater)
    ---- **** -----
    --- * ***  * -- Windows-10-10.0.17134-SP0
    -- * - **** ---
    - ** ---------- [config]
    - ** ---------- .> app:         forwarding:0x2d8cff9f4a8
    - ** ---------- .> transport:   redis://localhost:6379//
    - ** ---------- .> results:     redis://localhost:6379/
    - *** --- * --- .> concurrency: 8 (prefork)
    -- ******* ----
    --- ***** ----- [queues]
     -------------- .> celery           exchange=celery(direct) key=celery
    
    
    [tasks]
      . Data_forwarding.celery.debug_task
      . forwarding.tasks.save_xml
    

    정시 작업(apscheduler.scheduler)
  • 설치 APScheduler
  • pip install APScheduler==2.1.2
    
  • url 에 다음 코드 를 추가 합 니 다
  • from apscheduler.scheduler import Scheduler
    from forwarding import views
    #     
    sched = Scheduler()
    #         
    @sched.interval_schedule(seconds=10)
    def send():
        # views.    
        views.send_status0()
    
    sched.start()
    

    좋은 웹페이지 즐겨찾기