DeadlineExceededError - PullRequest
       17

DeadlineExceededError

2 голосов
/ 26 апреля 2011

Когда я пытаюсь использовать запрос в хранилище данных Google App Engine, как это:

user = User.all().filter('name =',userName).get()

У меня появляется эта ошибка: DeadlineExceededError.

РЕДАКТИРОВАТЬ: Это моя функция:

def feeds(request):
    dict = get_user_details()
    search_key = None
    if request.GET.has_key('search_key'):
        search_key = request.GET['search_key']
        dict['search_key']=search_key
    feeds = list()
    if search_key is not None and search_key!="":
        feeds_list = Feed.all().order('-CreatedDate')
        search_string=string.upper(search_key)
        for feed in feeds_list:
            feed_name=string.upper(feed.FeedUrl)
            if search_string in feed_name:
                feeds.append(feed)
            dict['search_key']=search_key
    else:
        feeds = Feed.all().order('-CreatedDate')
    if request.GET.has_key('page'):
        page = request.GET['page']
    try:
        page = int(page) - 1
    except:
        page = 0

    paginator = Paginator(feeds,10)
    if page>=paginator._get_num_pages():
        page = paginator._get_num_pages() - 1

    dict["page_obj"]     = paginator.page(page+1)
    return render_to_response('feed_list.html', dict, context_instance=RequestContext(request))

Поиск по каналам, это занимает слишком много времени, поднимая DeadlineExceededError.

1 Ответ

1 голос
/ 27 апреля 2011

Это не будет масштабироваться:

    feeds_list = Feed.all().order('-CreatedDate')
    search_string=string.upper(search_key)
    for feed in feeds_list:
        feed_name=string.upper(feed.FeedUrl)
        if search_string in feed_name:
            feeds.append(feed)

Вы извлекаете каждый отдельный объект Feed из хранилища данных и затем локально фильтруете список на основе поискового запроса.Если вы хотите показать только 10 записей на странице, сделайте fetch(10) для вашего объекта запроса, чтобы не пытаться отодвинуть каждую сущность на одной странице.Используйте курсоры запросов для нумерации страниц.Если вы хотите отфильтровать большой набор объектов, вам необходимо предварительно определить индекс хранилища данных, который будет удовлетворять запросу;извлечение всего и локальная фильтрация непозволительно неэффективны.

...