django 캐시 신호가 높은 병발 문제
django 6가지 캐시 정책
Memcache (python-memcached )
Memcache (pylibmc )
캐시 페이지
1,@cache_페이지 메서드 캐시
@cache 추가페이지 장식기 캐시 매개 변수 캐시 시간, 캐시 방안, 접두사
@cache_page(timeout=10,cache='html',key_prefix='page')def list(request):
로그인 확인
chrs = string.ascii_letters
char = random.choice(chrs)
return HttpResponse(' :
%s' % char)
2, 중간부품을 추가하여 캐시를 하고 캐시 중간부품을 만들고 요청이 있을 때마다 판단합니다
class CachePageMiddleware(MiddlewareMixin):
캐시에 대한 페이지 경로 구성
cache_page_path = [
'/user/list/'
]
# process_request process_response ,request.path
def process_request(self, request):
#
if request.path in self.cache_page_path:
#
if cache.has_key(request.path):
return HttpResponse(cache.get(request.path))
def process_response(self, request, response):
#
if request.path in self.cache_page_path:
# , , ,
cache.set(request.path,
response.content, timeout=5)
return response
redis로 캐시
settings에서 캐시 항목 설정하기
CACHES = {
#
'default': {
# ,django-radis.cache.RedisCache
'BACKEND': 'django_redis.cache.RedisCache',
#
'LOCATION': 'redis://127.0.0.1:6379/10',
# , , ,
'OPTIONS': {
'CLIENT_CLASS': 'django_redis.client.DefaultClient',
'SOCKET_CONNECT_TIMEOUT': 10,
'SOCKET_TIMEOUT': 10
}
}
}
세션으로 캐시 설정
캐시 엔진
SESSION_ENGINE='django.contrib.session.backends.cache'
캐시 쿠키 이름
SESSION_COOKIE_NAME='SESSION_ID'
캐시 경로
SESSION_COOKIE_PATH='/'
SESSION_CACHE_ALIAS='default'
캐시 생존 주기
SESSION_COOKIE_AGE='1209600'
신호 메커니즘
django의 내부 이벤트 모니터링
복잡한 업무 결합
내장된 신호를 수신하다
먼저 일반적인 수신 신호를 설정하고 신호의connect () 함수를 사용합니다
from django.db.models.signals impoer pre_delete
def model_delete_pre(sender,**kwargs):from user.models import Order
if sender == Order:
print('')
pre_delete.connect(model_delete_pre)
장식기 방식으로 신호 수신 및 연결 정보 처리 함수 사용하기
from django.dispatch import receiver
@receiver(post_delete)def delete_model_post(sender,**kwargs):print(sender,kwargs)
pre_delete.connect(delete_model_post)
사용자 지정 신호
signals 패키지를 만들고 init에 선언
from django import dispatch
codeSignal = dispatch.Signal(providing_args=['path','phone','code'])
메시지 보내기
업무 수요에 따라 적당한 위치에서 정보를 보내다
def new_code(request):
#
# ,
code_text = code_new_code_str(4)
print(code_text)
phone = request.GET.get('phone')
print(phone)
#
signal.codeSignal.send('new_code',
path = 'request.path',
phone = phone,
code = code_text)
return HttpResponse('%s...' % phone)
신호를 받다
from signals import codeSignalfrom django import dispatch
@dispatch.receiver(codeSignal)def cache_code(sender,**kwargs):print('...')print(sender,kwargs)
HttpResponse의 하위 클래스
JsonResponse
HttpResponseRedirect
HttpresopnseNotAllow
HttpResponseGone
django 중간부품 관련 함수
process_request()
process_response()
process_view()
process_exception()
process_template_response()
페이지 나누기 속성
bumber
object_list
has_previous
has_next
previous_page_number
next_page_number
높은 동시 솔루션
celery+redis 대기열 사용하기
celery c10k 문제 해결, 중간부품과 백엔드 작업 실행 단원을 통해 높은 병발 문제 해결
celery 구성 요소
메시지 중간부broker
작업 실행 단위 작업자
저장 작업 실행 단위 저장result
프로비저닝
관련 문서:http://docs.celeryproject.org/en/latest/django/index.html
win은celery 이후 다중 프로세스 방식을 지원하지 않습니다. 협동 방식으로 바꿔야 합니다.
홈 디렉토리에 celery 만들기
from future import absolute_import ,unicode_literalsimport osfrom celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE','advicedjango.settings')
app = Celery('advicedjango',broker='redis://10.36.174.1:6379/8')app.config_from_object('django.conf.settings')
app.autodiscover_tasks()
주 항목의 init 스크립트에 all 속성 추가
from .celery import app as celer_app
all = ('celery',)
응용 모듈에서tesk퀘스트 모듈 만들기
from celery import shared_task
@shared_taskdef qbuy(id,name):print(id,name)time.sleep(1)return '%s,%s % (id,name)'
settings에서celery 항목 구성
CELERY_IMPORTS = ('stockapp.tasks',)
celery 시작
celery -A advicedjango worker -P gevent -I info
- A 지정 항목, - P 지정 스레드-I 지정 정보
qbuy('1991',3)
Celery 서비스는 작업을 수신하고 실행하며 결과를 볼 수 있습니다.
하지만 결과는 경고였다.실행 단원이 임무를 완성한 결과를 처리하지 않았기 때문이다.
pip3 install django-celery-results
settings에서result 프로젝트를 설정합니다
'django 추가celery_result'
CELERY 추가RESULT_BACKEND = 'django-db', django-cache
신관 창고의 이전을 진행하다
python manage.py migrate django_celery_results
마이그레이션이 완료되면 Celerra를 다시 시작합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JavaScript의 Cache API - 단 20줄의 코드만 있으면 됩니다.이제 API를 이렇게 호출할 수 있습니다. If there is a cache value of the current api call then it will return values from cache otherwis...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.