Очереди задач или многопоточность в движке приложений Google - PullRequest
1 голос
/ 28 января 2012

У меня есть сервер на Google App Engine. Одна из моих задач - сопоставлять огромный набор записей с другим.Это занимает очень много времени, если мне нужно сопоставить 10000 записей со 100. Каков наилучший способ реализации этого.

Я использую стек Web2py и развернул свое приложение в Google App Engine.

Ответы [ 3 ]

1 голос
/ 28 января 2012

Многопоточность вашего кода не поддерживается в GAE, поэтому вы не можете явно использовать его.

Сам GAE может быть многопоточным, что означает, что один экземпляр веб-интерфейса может обрабатывать несколько запросов http одновременно.

В вашем случае лучший способ добиться параллельного выполнения задачи - это очередь задач.

1 голос
/ 29 января 2012

Основная структура того, что вы делаете, состоит в том, чтобы задача cron отвечала за разделение работы на более мелкие блоки и выполнение каждого блока с помощью очереди задач.Полезной нагрузкой для каждой задачи будет информация, которая идентифицирует объекты в первом наборе (например, набор ключей).Каждая задача будет выполнять любые запросы, необходимые для объединения объектов в первом наборе с объектами во втором наборе и сохранения промежуточных (или, возможно, конечных) результатов.Вы можете изменять размер полезной нагрузки и скорость очереди задач до тех пор, пока она не будет работать так, как вы хотите.

Если результаты каждой задачи необходимо агрегировать, вы можете записать завершение каждой задачи и проверить, все ли задачи выполненызавершить или просто выполнить другую работу, которая опрашивает записи о завершении, чтобы запустить агрегацию.Когда функция MapReduce станет более доступной, это станет основой для выполнения этой работы.

http://www.youtube.com/watch?v=EIxelKcyCC0 http://code.google.com/p/appengine-mapreduce/

1 голос
/ 28 января 2012

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

С помощью задачи вы можете добавить ее, затем обработать до установленного срока, а затем заново создать другую задачу с оставшейся частью задачи, если вы не завершили свою работу к сроку.

...