Решение для очереди задач?

Раньше я никогда не использовал очередь задач. У меня проблема с получением отчета обо всех моих контактах из хранилища данных.

Код такой:

allContactos=db.GqlQuery("select * from contactsDB").run(batch_size=1000)
for contactN in allContactos:
    ... (here I put all the fields in csv format)

Проблема в том, что я получаю «500 Server Error» из-за большого количества контактов.

Мой вопрос: это хороший подход, чтобы попытаться решить эту проблему с помощью очереди задач? Можете ли вы дать мне совет по разделению этого запроса на многие задачи?

С Уважением!


person lscena    schedule 10.03.2014    source источник
comment
если вы всегда выполняете операцию со всеми записями в модели хранилища данных, вы можете использовать mapreduce.   -  person marcadian    schedule 10.03.2014


Ответы (1)


Вам не нужно разбивать запрос на множество задач. Вы можете запустить одно задание. Если эта задача занимает более 10 минут, вам придется использовать серверную часть. для выполнения этой задачи.

Вы должны либо отправить файл пользователю по электронной почте, когда задача будет завершена, либо создать ссылку в своем приложении / веб-сайте, чтобы загрузить этот файл, когда он будет готов.

person Andrei Volgin    schedule 10.03.2014
comment
Спасибо за Ваш ответ. Как узнать, что задача выполнена? а как мне создать ссылку для получения результата задачи? - person lscena; 10.03.2014
comment
Обратите внимание, что если это занимает более 10 минут, вам не обязательно нужен бэкэнд. Предполагая, что вы можете запросить огромный список с разбивкой на страницы (маркеры страниц) и иметь одну очередь задач за другой, каждая из них выполняет одну страницу. Но вывод должен быть чем-то вроде текстового файла диска, и вы продолжаете добавлять к нему. - person Zig Mandel; 10.03.2014
comment
Цепочка задач: blog.notdot.net/2010/03 / Task-Queue-task-chaining-done-right - person voscausa; 10.03.2014
comment
Ваша задача завершается, когда выполняется последняя строка кода в ней. Вы можете отправить себе (или пользователю) электронное письмо, например, когда задача завершит запись файла. Что касается ссылки, ваше приложение может периодически запрашивать сервер, чтобы узнать, доступен ли файл. Когда он находит файл, он может отображать ссылку для его получения. - person Andrei Volgin; 11.03.2014