Почему я могу получить доступ к объекту во время его сигнала post_save, но не тогда, когда я запускаю код в этом сигнале, который вызывает его в другом процессе

Все, у меня проблема с сигналами django.

У меня есть модель Чтобы ускорить отклик при загрузке страниц, я разгружаю некоторую интенсивную обработку, которая должна быть выполнена, через вызов второго веб-сервера localhost, который мы запускаем, и оба используют одну и ту же базу данных. Я наблюдаю поведение, при котором вызывающий процесс может получить объект, а вызываемый процесс - нет. И порт 80, и порт [порт] указывают на процессы django, запущенные в одной базе данных.

В models.py

class A(models.Model):
    stuff...

def trigger_on_post_save( sender, instance, create, raw, **keywords):
    #This line works
    A.objects.get( pk=instance.pk )
    #then we call this
    urlopen( r'http://127.0.0.1:[port]' + 
        reverse(some_view_url, args(instance_pk) ).read()

post_save.connect( trigger_on_post_save, A )

В views.py

def some_view_function( request, a_pk ):
    #This line raises an object_not_found exception
    A.objects.get( pk=a_pk )

Кроме того, после того, как вызов urlopen вызывает исключение, объект не существует в базе данных. Насколько я понимаю, post_save был вызван после того, как объект был сохранен и записан в базу данных. Это неверно?

14
задан mklauber 16 December 2011 в 00:09
поделиться