Подтвердить что ты не робот

Возможны ли асинхронные модели Django?

Я новичок в Django, но приложение, которое я имею в виду, может иметь URL-адреса, которые выглядят следующим образом:

http://mysite/compare/id_1/id_2

Где "id_1" и "id_2" являются идентификаторами двух разных объектов модели. В обработчике для "сравнения" я хотел бы асинхронно и параллельно запрашивать и извлекать объекты id_1 и id_2.

Есть ли способ сделать это, используя стандартный синтаксис Django? Я надеюсь на псевдокод, который выглядит примерно так:

import django.async 

# Issue the model query, but set it up asynchronously.  
# The next 2 lines don't actually touch my database 
o1 = Object(id=id_1).async_fetch()
o2 = Object(id=id_2).async_fetch()

# Now that I know what I want to query, fire off a fetch to do them all
# in parallel, and wait for all queries to finish before proceeding. 

async.Execute((o2,o2))

# Now the code can use data from o1 and o2 below...
4b9b3361

Ответ 1

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

Что-то вроде этого для urls.py:

urlpatterns = patterns('',
    (r'^compare/(\d+)/(\d+)/$', 'my.compareview'),
)

И это для представления:

def compareview(request, id1, id2):
    # in_bulk returns a dict: { obj_id1: <MyModel instance>, 
    #                           obj_id2: <MyModel instance> }
    # the SQL pulls all at once, rather than sequentially... arguably
    # better than async as it pulls in one DB hit, rather than two
    # happening at the same time
    comparables = MyModel.objects.in_bulk([id1, id2])
    o1, o2 = (comparables.get(id1), comparables.get(id2))