2012-02-28 3 views
3

У меня есть приложение Python, создающее 3 разных вызова api один за другим в одном блоке кода. Я хотел бы выполнить эти вызовы асинхронно, а затем выполнить действие, когда все будет готово.GAE-готовые асинхронные операции в Python?

Пара отмечает:

  • Другие ответы, касающиеся асинхронными действий указывают рамки, как Twisted и сельдерея, но я строю приложение web2py для GAE, так что те, демон на основе структуры не являются вариант AFAIK.
  • Я использую библиотеки api-обертки для различных apis, поэтому мне интересно, есть ли асинхронное решение, которое может быть реализовано на уровне потока, а не на уровне запросов HTTP?
+1

Вы можете сделать асинхронную URL Fetch вызовы, если это полезно: http://code.google.com/appengine/docs/python/urlfetch/ asynchronousrequests.html –

+0

Эми - это может быть лучшим/единственным ответом - сделайте это ответом, чтобы я мог дать вам немного доверия. – Yarin

+0

отлично, я сделал это. –

ответ

3

Python поддерживает асинхронную URL Fetch вызовы, которые могут быть полезны: http://code.google.com/appengine/docs/python/urlfetch/asynchronousrequests.html

+0

Спасибо, похоже, что это может быть единственным способом обработки завершения асинхронного процесса. – Yarin

+0

Предполагая, что ваши выборки асинхронного URL будут зависеть от рабочих страниц, которые вы создали, вам, вероятно, необходимо включить параллельные запросы, чтобы убедиться, что они фактически выполняются параллельно: http://code.google.com/appengine/docs/python/python27/newin27.html#Concurrent_Requests – Raven

1

Если вы храбры, вы можете попробовать Экспериментальный новый DB api, NDB. Он имеет асинхронные API для работы с данными datastore + URL. Если это то, что вы надеялись сделать асинхронно, тогда вам повезло.

+0

Нет, это не имеет ничего общего с datastore - только за пределами API. – Yarin

1

Task Queues может вас достать. Я не вижу никаких обещаний относительно отзывчивости, но you can definitely control how many tasks are started per second.

+0

Raven- В моем случае мне нужно иметь возможность выполнить действие по завершении - я не вижу функции обратного вызова или прослушивателя для очередей задач. Однако они выглядят так, как будто они могут быть полезны в других местах, и я не знал о них, поэтому спасибо. – Yarin

+0

@Yarin Вы могли бы написать свои задачи в хранилище данных. Затем основной код мог опросить для завершения. – Raven