django+celery에서task값이view로 되돌아와 전면에 표시
위의 이 사진은 네트워크에서 Django가 Request를 처리하는 프로세스 설명도입니다.대체로
브라우저가 http 요청 -->httphandling(request 해석) -->url 일치(정규 일치로 대응하는 View를 찾음) -->View에서 논리적인 처리와 데이터 계산 (Model 클래스를 호출하여 데이터베이스의 삭제 및 수정 검색 포함) -->데이터를 template로 전송하고 대응하는template/response로 되돌려줍니다.몇 가지 간단한 작업은 View에서 처리할 수 있습니다.뷰에서 작업을 처리할 때 페이지가 결과를 반환할 때까지 대기합니다.그러나 일부 복잡한 조작에 대해서는 뷰에서response를 되돌려주고 백엔드에서 작업을 처리해야 한다.사용자가 기다릴 필요가 없습니다.작업 처리가 완료되면 Ajax와 같은 방식으로 사용자에게 알릴 수 있습니다.Celery는 Python을 기반으로 개발된 분포식 작업 대기열 프레임워크로 작업 대기열을 사용하여 분포된 기계/프로세스/라인에서 작업 스케줄링을 수행할 수 있습니다.
Celerra의 기본 아키텍처
위의 그림은 셀러리의 기본 구조로 전형적인 생산생인 소비자 모델을 사용하는데 주로 세 부분으로 구성되어 있는데 그것이 바로 브로커(메시지 대기열),workers(소비자: 임무 처리),backend(저장 결과)이다.실제 응용 프로그램에서 사용자는 웹 전단에서 요청을 합니다. 요청한 작업을 작업 대기열 브로커에 버리고, 빈 워크맨이 작업을 처리하면 됩니다. 처리 결과는 백엔드 데이터베이스 백엔드에 잠시 존재합니다.우리는 한 대의 기계나 여러 대의 기계에서 여러 개의worker 프로세스를 동시에 일으켜 분포식 병행 처리 임무를 실현할 수 있다.
macOS Sierra 10.12.3Django 1.10Celery 4.0.2
이전 버전의 셀러리에는 Django를 위한 셀러리 버전이 있습니다:django-celery.그러나 현재 셀러리는 하나의 버전으로 통합되어 있으므로 기본 셀러리를 직접 설치하면 됩니다. pip install celery
Celery는 RabbitMQ, Redis, Amazon SQS, Zookeeper를 추천합니다. 이 몇 개는 브로커로 사용하지만 앞의 두 개만 생산 환경에서 사용할 수 있습니다.아래의 표는 몇 가지broker를 비교하였다.
NameStatusMonitoringRemote Control
RabbitMQStableYesYes
RedisStableYesYes
Amazon SQSStableNoNo
ZookeeperExperimentalNoNo
나는 레드스를 브로커로 사용했다.Redis를 설치하는 것 외에, Redis의python 지원 라이브러리도 설치해야 합니다.Redis 설치:brew install redis
redis를 설치한python 지원 라이브러리:pip install redis
Redis-server를 입력하여 Redis를 시작합니다.아래의 그림을 보았을 때, 리디스를 성공적으로 열었다는 것을 의미합니다.redis 기본 감청 6379 포트입니다.오픈 후 ctrl+c로 종료할 수 있습니다.
redis 열기
Celery는 proj/proj/celery에서 권장합니다.py에서 셀러리의 인스턴스를 정의합니다.파일proj/proj/celery.py:from future import absolute_import, unicode_literalsimport osfrom celery import Celery
set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')
app = Celery('proj')
Using a string here means the worker don't have to serialize
the configuration object to child processes.
- namespace='CELERY' means all celery-related configuration keys
should have a
CELERY_
prefix. app.config_from_object('django.conf:settings', namespace='CELERY')
Load task modules from all registered Django app configs.
app.autodiscover_tasks()
@app.task(bind=True)def debug_task(self):print('Request: {0!r}'.format(self.request))
그리고 proj/proj/init.py가 설정을 좀 했습니다.파일proj/proj/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']
위 단계를 완료하면 명령줄에 다음과 같이 입력할 수 있습니다:celery worker -A proj -l info
일반적으로 다음 그림과 유사한 출력이 나타날 수 있습니다.
celery를 열고 Redis와 연결
ok, 다음으로celery에서 실행한 작업의 결과를 Django로 되돌려주기 위해서django-celery-results를 설치해야 합니다.pip install django-celery-results
다시 proj/proj/settings.py:에서 다음과 같은 설정을 했습니다. 파일proj/proj/settings.py:
Celerra 설정
CELERY_BROKER_URL = 'redis://localhost:6379/0'CELERY_ACCEPT_CONTENT = ['json']CELERY_TASK_SERIALIZER = 'json'CELERY_RESULT_BACKEND = 'django-db'CELERY_TIMEZONE = 'Asia/Shanghai'
INSTALLED_APPS = [......'django_celery_results']
다시migrate 한번:migrate djangocelery_results
시간 소모 조작 시뮬레이션
@shared_taskdef longtime_test():...
여기에 약간의 시간 소모 조작을 진행하다
...
views에서.py에서 이렇게 쓰여있음:def testview(request):
do something
longtime_test.delay()
return render(request, 'template.html', {'data': data})
이렇게 하면 먼저 html 모델로 돌아가 백엔드에서 데이터를 계산할 수 있다.
저자: 장작토 링크:https://www.jianshu.com/p/6f8576a37a3e출처: 약서 약서의 저작권은 작가의 소유이며, 그 어떠한 형식의 전재도 작가에게 연락하여 권한을 수여받고 출처를 밝혀 주십시오.
전재 대상:https://blog.51cto.com/lianlongfei/2333590
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.