Python: потокобезопасная очередь на основе файлов - PullRequest
3 голосов
/ 10 марта 2012

Я создаю приложение (приложение A) на Python, которое прослушивает порт, получает записи NetFlow, инкапсулирует их и безопасно отправляет их в другое приложение (приложение B).Приложение А также проверяет, была ли запись успешно отправлена.Если нет, его нужно сохранить.Приложение A ждет несколько секунд, а затем пытается отправить его снова и т. Д. Это важная часть.Если отправка была неудачной, записи должны быть сохранены, но в то же время может поступить гораздо больше записей, и их тоже нужно сохранить.Идеальный способ сделать это - очередь.Однако мне нужно, чтобы эта очередь была в файле (на диске).Я нашел, например, этот код http://code.activestate.com/recipes/576642/, но он «При открытии загружает полный файл в память», и это именно то, чего я хочу избежать.Я должен предположить, что этот файл с записями будет иметь до пары ГБ.

Итак, мой вопрос, что бы вы рекомендовали хранить эти записи?Он должен обрабатывать много данных, с другой стороны, было бы замечательно, если бы он не был слишком медленным, потому что во время нормальной работы одновременно сохраняется только одна запись, и она сразу же читается и удаляется.Таким образом, основное состояние - пустая очередь.И это должно быть поточно-ориентированным.

Должен ли я использовать базу данных (dbm, sqlite3 ..) или что-то вроде pickle, shelve или что-то еще?

Я немного запутался в этом ..Спасибо.

1 Ответ

1 голос
/ 10 марта 2012

Вы можете использовать Redis в качестве базы данных для этого. Он очень очень быстрый, работает с очередями на удивление хорошо и может сохранять свое состояние на диск несколькими способами, в зависимости от желаемого уровня отказоустойчивости. Будучи внешним процессом, вам может не потребоваться, чтобы он использовал очень строгую политику сохранения, поскольку в случае сбоя вашей программы все сохраняется внешне.

см. Здесь http://redis.io/documentation, и если вы хотите получить более подробную информацию о том, как сделать это в Redis, я был бы рад уточнить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...