#python
#python
Вопрос:
Я разрабатываю многопоточное приложение, которое будет отслеживать и обрабатывать файлы в выбранных папках (в соответствии с предпочтениями пользователя).
Каков наилучший способ хранения информации о файлах? (например, пользователь добавляет каталог xxx, мне нужно просмотреть каталог и добавить все файлы и вспомогательный каталог в мое приложение)
Я рассматривал свою собственную древовидную структуру или использовал SQLite.
Спасибо
Комментарии:
1. Это зависит от вашей среды, размера и типа проекта и т.д.
Ответ №1:
SQLite — отличное решение, поскольку оболочка базы данных будет обрабатывать блокировку операций чтения и записи (внутри базы данных) за вас. Вы даже можете использовать столбец в качестве блокировки чтения / записи вашего файла.
Комментарии:
1. Я читал, что существуют ограничения на использование SQLite с многопоточностью. Есть ли другой способ?
2. @user653952 : Два потока не могут работать с одной и той же записью базы данных одновременно, однако в любом случае было бы очень плохо это делать. Вам придется быть осторожным с условиями гонки и т.п., Но вам все равно придется следить за этим — о каких ограничениях вы слышали?
Ответ №2:
Это зависит от вашей среды, размера и типа проекта и т.д.
Самый простой способ — использовать маринованный огурец.
Например, данные находятся в виде кортежа в таком формате:
actions=(
{time=..., user=..., action="adddir", name="new folder"},
{time=..., user=..., action="accessfile", name="/etc/passwords"}
)
#save the data:
f = open('somefile', 'w');
pickle.dump(actions, f)
f.close()
#laod them:
f = open('somefile', 'r');
actions = pickle.load(f)
f.close()
Комментарии:
1. Однако для этого вам потребуется самостоятельно обрабатывать блокировку файла pickle. Это зависит от того, как часто вы ожидаете, что несколько процессов захотят читать / записывать в / из одного и того же обработанного файла, и хотите ли вы, чтобы они знали об изменениях, внесенных частично в их цикл чтения / записи.