Асинхронные классы Python - PullRequest
4 голосов
/ 06 января 2011

Я настоящий программист n00b, поэтому извиняюсь, если это простой или простой вопрос.

Я пишу на Python, Webapp, Appengine.

Мой вопрос, возможно ли этопродолжать работать после того, как я выписал страницу?И это лучший способ что-то сделать?По сути, когда кто-то создает список на моем сайте (www.7bks.com), я хочу немного поработать над пост-обработкой только что выбранных книг.

В настоящее время у меня есть что-то вроде этого (псевдокод!)

class InputList(webapp.RequestHandler):
    def post(self):
        #get books data from the post and put in datastore
        list = List()
        list = self.request.get('books')
        list.put()

        #redirect the user to the new list
        self.redirect("http://www.7bks.com/list/&s" % list.id)

Теперь у меня есть медленная (с вызовами API) постобработка, которую я хочу выполнить для каждой книги в списке.Я не хочу замедлять перенаправление пользователя и создание страницы списка, потому что моя постобработка не влияет напрямую на страницу списка.Могу ли я это сделать?

class InputList(webapp.RequestHandler):
    def post(self):
        #get books data from the post and put in datastore
        list = List()
        list = self.request.get('books')
        list.put()

        #redirect the user to the new list
        self.redirect("http://www.7bks.com/list/&s" % list.id)

        #carry on working behind the scenes independently of the user
        for book in list:
            data = heavyprocessing(book)

Это приведет к тому, что мое приложение будет эффективно обслуживать перенаправление, а затем продолжит работу за кулисами?

Существуют ли более эффективные способы сделать это?Я знаю, что мог бы использовать CRON, но я хотел бы, чтобы эти тяжелые обработанные данные были сделаны довольно скоро после создания списка, но не сразу.Кажется, что Cron может быть неправильным ответом (если у меня нет сценария CRON, который запускается каждую минуту или около того и проверяет новые книги для обработки?)

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

Том

1 Ответ

5 голосов
/ 06 января 2011

Проверьте API очереди задач .

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...