Процесс очереди задач в Python - PullRequest
       27

Процесс очереди задач в Python

0 голосов
/ 09 августа 2010

Задача: У меня есть очередь задач, хранящихся в БД. Оно растет. Мне нужно решать задачи скриптом Python, когда у меня есть ресурсы для этого. Я вижу два пути:

  1. скрипт Python, работающий постоянно. Но мне это не нравится (причина возможной утечки памяти).

  2. Python-скрипт, вызываемый cron и выполняющий небольшую часть задачи. Но мне нужно решить проблему с одним действующим активным скриптом в памяти (чтобы предотвратить увеличение количества активных скриптов). Какое лучшее решение для его реализации в Python?

Любые идеи, чтобы решить эту проблему вообще?

Ответы [ 3 ]

1 голос
/ 09 августа 2010

Вы можете использовать файл блокировки, чтобы предотвратить запуск нескольких скриптов в cron.См. Ответы на предыдущий вопрос « Python: модуль для создания файла блокировки на основе PID ».На самом деле это просто хорошая практика для всего, что вам нужно, чтобы убедиться, что не будет запущено несколько экземпляров, поэтому вы должны изучить его, даже если у вас постоянно работает скрипт, что я делаю предложить.

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

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

Это также дает то преимущество, что вы можете запускать несколько задач параллельно, если ваша система имеетили чем одно ядро ​​процессора, или если ваши задачи тратят много времени на ожидание ввода / вывода.

1 голос
/ 09 августа 2010

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

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

1 голос
/ 09 августа 2010

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

Я бы использовал метод 1; если вам нужно больше энергии, вы можете создать небольшой процесс Python, который контролирует очередь БД и запускает новые процессы для обработки задач.

...