LINUX.ORG.RU

Легковесная очередь сообщений с python-api

 ,


0

1

Есть процесс, который «всегда» работает(вебсервер). Нужно из него класть в очередь сообщения, которые потом будут выбиратсья скриптом, запускаемом по крону. Всякие ынтырпрай монстры типа hornetq или rabbitmq использовать не хочется, т.к. нужно для небольшой нагрузки и на локалхосте.

Никаких готовых решений не нашел пока. Из более-менее адекватных идей - использовать sqlite для хранения очереди сообщений. С обычным файлом слишком много мороки вокруг нужно самому мутить.

Кто что посоветует?

★★

Если не подходит файл, тогда может подойдёт каталог файлов? :)

blexey ★★★★★
()

Berkeley DB, думаю, лучше подходит для этих целей, чем sqlite.

Olegymous ★★★
()
Ответ на: комментарий от true_admin

На куче файликов в папке, как blexey предлагал? Т.е. идея в том, чтобы каждое сообщение в отдельный файл пихать, а когда оно обработано, то файл удалять?

Вроде бы это решает главные проблемы одного файла: 1. Не нужно лочить файл (а т.к. всего один процесс, то директорию тоже лочить не нужно - тупо добавляем в нее файл и ок) 2. Атомарность записи сообщения (move работает атомарно, так что через временный файл можно атомарно создать новое сообщение в папке)

Спасибо.

kulti ★★
() автор топика
Ответ на: комментарий от kulti

Собственно, у меня только одно возражение против файлов: очень часто разработчики забывают проверять на ошибки. Например, ты случайно запустил своего демона из-под рута и рабочий процесс не может писать в файл. Или свет моргнул и какой-то из файлов потерялся. Или не до конца дописался (можно попробовать вызывать fdatasync, кстати).

Есть ещё нюанс с очерёдностью. В общем случае файлы хранятся в неотсортированном виде, поэтому надо будет сортировать если порядок обработки данных имеет значение.

Поэтому идея с sqlite, на самом деле, неплоха т.к. многих граблей можно избежать.

true_admin ★★★★★
()

вангую, что тебе не нужны все богатые возможности sqlite - бери какой-нибудь NoSql, leveldb, например

EugeneBas ★★
()

в bdb уже есть такая сущность как очередь

Reset ★★★★★
()
Ответ на: комментарий от true_admin

Меня как раз грабли и смущают. Не хочется на это много времени тратить. Можно, конечно, и bdb взять, как тут советуют, но с ней опыта вообще 0, т.е опять - время... Так что пока на sqlite сделаю, а бэкенд можно будет подменить потом, когда на ощупывание bdb время появится.

kulti ★★
() автор топика
Ответ на: комментарий от kulti

Можно, конечно, и bdb взять, как тут советуют, но с ней опыта вообще 0, т.е опять - время...

Там нет ничего сложного. http://hg.jcea.es/pybsddb/file/4c87e8ee80e2/Lib/bsddb/test/test_queue.py

Так что пока на sqlite сделаю

И конечно сделаешь потоко- и процессо- безопасно. Ню-ню.

anonymous
()
Ответ на: комментарий от anonymous

За пример спасибо, а по sqlite подучи матчасть.

kulti ★★
() автор топика

Я бы посоветовал redis, т.к. он маленький, но быстрый и имеет механизм очередей.

Как вариант, посмотрите на http://python-rq.org/

kost-bebix ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.