2012-08-21 2 views
0

У меня есть приложение django, которое использует два внешних скрипта. Один скрипт перемещает файл из A в B, сохраняет значение для B в базе данных - и он существует впоследствии, что должно совершать любые открытые транзакции. Следующий скрипт реагирует на перемещение файла (используя inotify), вычисляет md5sum (который, как кажется, занимает время), а затем ищет запись в базе данных, например x = Queue.get(filename=location). Глядя на отметки времени моих журналов, я на 100% уверен, что первый скрипт длинный, прежде чем второй скрипт (фактически демон) выполнит запрос. Интересно, что вещь отлично работает после перезапуска демона.Кэширование запросов БД в django

Это заставляет меня поверить, что каким-то образом Queryset (я фактически запускаю код, показанный выше, каждый раз, когда новый файл обнаруживается с помощью inotify) кэшируется во время выполнения демона. Тем не менее я бы не хотел перезапускать демона все время, но вместо этого заставить запрос фактически использовать БД вместо этого кеша.

документация Джанго ничего не говорит о том, что - однако, как правило, Джанго не используется в качестве внешнего :)

Спасибо заранее за любые подсказки!

Бен

PS: по желанию источник соответствующей части от демона

def _get_info(self, path): 
    try: 
     obj = Queue.objects.get(filename=path) 
     x = obj.x 
     return x 
    except Exception, e: 
     self.logger.error("Error in lookup: %s" % e) 
     return None 

Это называется нитью каждый раз, когда новый файл перемещен в наблюдающим каталог

В то время как код в первом сценарии выглядит как

for f in Queue.objects.all(): 
    if (matching_stuff_here): 
     f.filename = B 
     f.save()  
     sys.exit(0) 

ответ

0

You ha нет реального кода, поэтому мы должны угадать. Я предполагаю, что, хотя транзакция в первом скрипте выполнена и зафиксирована, вы все еще внутри открытой транзакции в сценарии B: и из-за изоляции транзакции вы не увидите никаких изменений в B до тех пор, пока не закончите транзакцию там.

+0

Я обновил свое сообщение, чтобы включить соответствующие исходные фрагменты. Однако, насколько я понимаю все это, мне пришлось бы заставить транзакцию завершить работу после каждого поиска в демоне, верно? – sqrtsben

Смежные вопросы