У меня есть приложение 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)
Я обновил свое сообщение, чтобы включить соответствующие исходные фрагменты. Однако, насколько я понимаю все это, мне пришлось бы заставить транзакцию завершить работу после каждого поиска в демоне, верно? – sqrtsben