Как лучше всего запустить асинхронный запрос задания в представлении Django?

Синтаксис немного отличается:

Dictionary<int, string> names = new Dictionary<int, string>()
{
    { 1, "Adam" },
    { 2, "Bart" }
}

Примечание, что Вы эффективно добавляете кортежи значений.

Как заметка на полях: инициализаторы набора содержат аргументы, которые являются в основном аргументами любому , Добавляют () функция, которая пригождается относительно типа времени компиляции аргумента. Таким образом, если у меня есть набор:

class FooCollection : IEnumerable
{
    public void Add(int i) ...

    public void Add(string s) ...

    public void Add(double d) ...
}

следующий код совершенно законен:

var foos = new FooCollection() { 1, 2, 3.14, "Hello, world!" };
11
задан John Meagher 13 September 2009 в 18:00
поделиться

3 ответа

Почему бы просто не запустить поток для выполнения обработки, а затем продолжить отправку ответа?

1
ответ дан 3 December 2019 в 09:20
поделиться

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

Например, если данные будут одинаковыми для каждого пользователя и могут выполняться по расписанию, вы можете использовать cron.

См .: http://www.b-list.org/weblog/2007/sep/22/standalone-django-scripts/ или http://docs.djangoproject.com/en/dev/howto/custom-management-commands/

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

Есть несколько вариантов реализации этого в Django: Сервис Django Queue - это чисто django & python и простой, хотя последний коммит был в апреле, и похоже, что проект был заброшен. http://code.google.com/p/django-queue-service/

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

http://ask.github.com/celery/introduction.html http://github.com/ask/celery/tree

1
ответ дан 3 December 2019 в 09:20
поделиться

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

Если у вас небольшая рабочая нагрузка, вы можете использовать используемый подход от django-mailer , который должен определять модель «заданий», сохранять новые задания в базе данных, а затем заставлять cron время от времени запускать автономный скрипт для обработки заданий, хранящихся в базе данных (удаляя их когда сделано). Вы можете использовать что-то вроде django-chronograph , чтобы упростить планирование заданий

Если вам нужна помощь в понимании того, как написать сценарий для обработки задания, см. Статью Джеймса Беннета Автономные скрипты Django за помощью.

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

10
ответ дан 3 December 2019 в 09:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: