Сортированная, параллельная реализация очереди (витая) с sqlite? - PullRequest
3 голосов
/ 19 января 2012

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

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

Моя текущая (вероятно, ошибочная) идея состояла в том, чтобы иметь генератор, который выполняет выбор SQL, который производит набор результатов с соответствующим приоритетом и выполняет итерацию по этому результату для генерации отложенных элементов. Проблема заключается в том, что пока генератор выполняет итерацию по набору результатов, дополнительные элементы могут быть добавлены в очередь с помощью отложений.

Есть ли способ сделать это без выполнения нового выбора каждый раз, когда вызывается генератор? То есть Можно ли автоматически «обновить» «набор результатов» и курсор итератора?

Если нет, как бы вы это реализовали?

Ответы [ 2 ]

2 голосов
/ 19 января 2012

Модуль очереди имеет класс PriorityQueue , который может удовлетворить ваши потребности.

1 голос
/ 19 января 2012

Почему бы не использовать список Python, используя модуль "heapq" из stdlib, чтобы сохранить его в приоритетном порядке? (Ваши элементы списка могут быть кортежами (priority, time_of_insertion, objects) - и поскольку данные хранятся в обычном списке Python, вы можете передавать их без проблем в скрученном приложении.

Я думаю, что было бы проще, чем использовать sqlite, если бы все, что вам нужно, это отсортировать по приоритету.

(В этом ответе я привожу пример использования heapq, который может помочь: heapq с пользовательским предикатом сравнения )

...