У меня есть веб-приложение Pylons, обслуживаемое Apache (mod_wsgi, prefork). Из-за Apache есть несколько отдельных процессов, выполняющих мой код приложения одновременно. Некоторые из некритических задач, которые приложение выполняет, я хочу отложить для обработки в фоновом режиме, чтобы улучшить «живое» время отклика. Итак, я думаю об очереди задач, многие процессы Apache добавляют задачи в эту очередь, отдельный отдельный процесс Python, обрабатывающий их один за другим и удаляющий из очереди.
Очередь предпочтительно должна быть сохранена на диске, чтобы необработанные задачи, поставленные в очередь, не терялись из-за сбоя питания, перезапуска сервера и т. Д. Вопрос: Каков разумный способ реализовать такую очередь ?
Что касается того, что я пробовал: я начал с простой базы данных SQLite и одной таблицы для хранения элементов очереди. В нагрузочном тестировании, когда увеличивался уровень параллелизма, я начал получать ошибки, связанные с базой данных, как и ожидалось. Быстрое и грязное решение состояло в том, чтобы заменить SQLite на MySQL - он хорошо справляется с проблемами параллелизма, но кажется излишним из-за простой вещи, которую мне нужно сделать. Связанные с очередями операции с БД также видны в моих отчетах по профилированию.