Cookiecutter django 如何增加cookiecutter django上的超时

Cookiecutter django 如何增加cookiecutter django上的超时,cookiecutter-django,Cookiecutter Django,我正在处理redis缓存中的一些数据。但我似乎无法足够快地处理它,以适应请求超时。有没有办法增加nginx或django中的超时?(我甚至不确定cookiecutter django是否有nginx) 当我在登台时点击可浏览的api时,我得到页面大小值>7的坏网关。我很确定我对默认超时进行了太多的计算。设置在settings/base.py 单位为秒 # views.py from rest_framework import viewsets from rest_framework.respo

我正在处理redis缓存中的一些数据。但我似乎无法足够快地处理它,以适应请求超时。有没有办法增加nginx或django中的超时?(我甚至不确定cookiecutter django是否有nginx)


当我在登台时点击可浏览的api时,我得到页面大小值>7的
坏网关
。我很确定我对默认超时进行了太多的计算。

设置在
settings/base.py

单位为秒

# views.py
from rest_framework import viewsets
from rest_framework.response import Response
from rest_framework.pagination import PageNumberPagination

class SmallResultsSetPagination(PageNumberPagination):
    page_size = 5
    page_size_query_param = "page_size"


class FooViewSet(viewsets.ModelViewSet):
    queryset = Foo.objects.all().order_by("id")
    serializer_class = FooSerializer
    pagination_class = SmallResultsSetPagination
    filterset_fields = ["bar"]

# serializers.py
from rest_framework import serializers

from .models import Foo


class FooSerializer(serializers.ModelSerializer):
    id = serializers.IntegerField(read_only=True)
    DT_RowId = serializers.SerializerMethodField()

    def get_DT_RowId(self, obj):
        return obj.id

    class Meta:
        model = Foo
        fields = (
            "id",
            "DT_RowId",
            "name",
            "baz",
            "api_data",
        )
        datatables_always_serialize = ("baz", "api_data")

# models.py
import logging
import xml.etree.ElementTree as ElementTree

from django.conf import settings
from django.contrib.auth import get_user_model
from django.core.cache import cache
from django.db import models
from django.utils.functional import cached_property

import requests
from requests.exceptions import ConnectionError, Timeout

logger = logging.getLogger(__name__)


def third_party_api():
    bars = cache.get("bars")
    if bars:
        print("cache hit")
        return bars

    def bars_to_dict(root):
        bars = {}
        for bar in root[1]:
            bar_name = issuer.tag
            entry = {}
            for pair in bar:
                tag = pair.tag.split("}")[-1]
                value = pair.text
                entry[tag] = value
            key = entry["buzz"].strip().lower()
            bars[key] = entry
        return bars

    try:
        r = requests.get(
            f"{API}", timeout=5,
        )
        root = ElementTree.fromstring(r.text)
        bars = bars_to_dict(root)
        cache.set("bars", bars, 60 * 5)
        return bars
    except (ConnectionError, Timeout) as e:
        if settings.DEBUG:
            tree = ElementTree.parse("scripts/bars.xml")
            root = tree.getroot()
            bars = bars_to_dict(root)
            cache.set("bars", bars, 60 * 5)
            return bars
        else:
            return {}


class Foo(models.Model):
    baz = models.BooleanField(default=False)

    @cached_property
    def api_data(foo):
        bars = third_party_api()
        match = bars.get(foo.id)
        if match:
            field = match.get("biz", False)
            return field == "true"
        else:
            return False
# http://docs.celeryproject.org/en/latest/userguide/configuration.html#task-time-limit
CELERY_TASK_TIME_LIMIT = 5 * 60
# http://docs.celeryproject.org/en/latest/userguide/configuration.html#task-soft-time-limit
CELERY_TASK_SOFT_TIME_LIMIT = 60