Совет относительно Python/Django и очередей сообщений

var a1 = [1,2,3,6];
var a2 = [1,2,3,5];

function check(a, b) {
  return (a.length != b.length) ? false : 
  a.every(function(row, index) {
    return a[index] == b[index];
  });
}  

check(a1, a2);

////// ИЛИ ///////

var a1 = [1,2,3,6];
var a2 = [1,2,3,6];

function check(a, b) {
  return (a.length != b.length) ? false : 
  !(a.some(function(row, index) {
    return a[index] != b[index];
  }));
}  

check(a1, a2)
42
задан Andy Hume 18 January 2009 в 20:42
поделиться

6 ответов

До сих пор я не нашел "хорошего" решения для этого. У меня есть некоторые более строгие требования мягкого реального времени (делающий снимок от маркируемой картонной коробки) так, вероятно, один из подходов достаточно быстр для Вас. Я предполагаю, что электронные письма могут ожидать в течение нескольких минут.

  • А "список ожидающих выполнения задач" в базе данных обрабатывается заданием крона.
  • А "список ожидающих выполнения задач" в базе данных, обработанной, постоянно будучи опрошенным демоном.
  • Используя пользовательского демона, который уведомляется веб-сервером через пакет UDP (в Производстве сегодня). В основном моя собственная система Организации очередей со стеком IP для обработки очереди.
  • Используя ActiveMQ как брокер сообщений - это не удалось из-за проблем устойчивости. Также мне Демоны Java обычно несколько пухлы
  • Используя Триггеры Обновления в CouchDB. Хороший, но Триггеры Обновления не предназначены, чтобы сделать тяжелую обработку изображений, так отрицательный результат, подходящий для моей проблемы.

До сих пор я не попробовал RabbitMQ и XMPP/ejabebrd для того, чтобы решить проблему, но они находятся в моем списке следующих вещей попробовать. RabbitMQ получил достойную возможность соединения Python в течение 2008 и существуют тонны библиотек XMPP.

, Но возможно все, в чем Вы нуждаетесь, является правильно настроенным mailserver на локальной машине. Это, вероятно, позволило бы Вам выводить письма синхронно в локальный mailserver и таким образом делать Ваш целый программный стек намного более простым.

14
ответ дан max 23 September 2019 в 14:14
поделиться

В Вашем конкретном случае, где это - просто почтовая очередь, я, пустошь вынимает простой способ и использует django-почтовая-программа . Как хорошая сторона bonues существуют другие сменные проекты, которые достаточно умны для использования в своих интересах django-почтовой-программы, когда они видят его в стеке.

Что касается более общих решений очереди, я не был в состоянии попробовать любой из них все же, но вот список, которые выглядят более интересными мне:

  1. pybeanstalk/beanstalkd
  2. python взаимодействует через интерфейс к gearman (который, вероятно, намного более интересен теперь с выпуском версия C gearman)
  3. , memcacheQ
  4. топает
  5. Сельдерей
24
ответ дан Paul M Furley 23 September 2019 в 14:14
поделиться

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

1
ответ дан nosklo 23 September 2019 в 14:14
поделиться

Если Вам уже установили MySQL, Вы могли бы составить таблицу для использования в качестве своего рода "списка ожидающих выполнения задач".

Потоки синхронно добавляют задания к таблице, и пакетная задача удаляет задания, поскольку они завершаются.

Тот путь, нет никакой потребности установить и узнать больше программное обеспечение, и это должно хорошо работать как персистентное хранилище задания, пока Вы не отправляете партии из электронной почты (как> 10/секунда).

0
ответ дан James Brady 23 September 2019 в 14:14
поделиться

Stompserver является хорошим вариантом. Это легко, легко установить и простой в использовании от Django/python.

У нас есть система с помощью stompserver в производстве для того, чтобы послать электронные письма и обработать другие задания асинхронно.

Django сохраняет электронные письма к базе данных, образцовый post_save обработчик в Django отправляет событие в stompserver, и stompserver передает событие потребительскому процессу, который делает асинхронную задачу (посылает электронное письмо).

Это увеличивается вполне приятно, потому что можно добавить потребительские процессы во времени выполнения - два потребителя могут послать вдвое больше электронных писем, и потребители могут быть на отдельных машинах. Одна небольшая сложность - то, что каждый потребности потребителя, которые должна знать ее собственная именованная очередь так Django, сколько потребителей доступно и отправляет событиям каждой очереди циклическим способом. (Два потребителя, слушающие на той же очереди, оба получат каждое сообщение = дублирование). Если Вы только хотите один потребительский процесс затем, это не проблема.

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

6
ответ дан Gruff 26 November 2019 в 23:57
поделиться

Вы можете посмотреть pymq . Он написан на python, обменивается данными по протоколу HTTP со своими клиентами и предоставляет множество вариантов мониторинга и управления очередями.

1
ответ дан 26 November 2019 в 23:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: