Я думал, что вы можете сделать скрипт, используя этот код
import sys
import ast
class visitor(ast.NodeVisitor):
def visit_Try(self, node):
...
if sys.version.startswith("2"):
visit_TryFinally = visit_TryFinally
elif sys.version.startswith("3"):
visit_TryFinally = visit_Try
sys.version.startswith()
для проверки версии Python.
Мы делаем это с помощью таблицы «Запрос» в базе данных.
Когда приходит загрузка, мы создаем загруженный объект File и создаем Request.
Мы запускаем фоновый пакетный процессор.
Мы возвращаем страницу 200 «мы работаем над этим» - она показывает запросы и их статус.
Наш пакетный процессор использует Django ORM. По завершении он обновляет объект Request. Мы можем (но не можем) отправить уведомление по электронной почте. В большинстве случаев мы просто обновляем статус, чтобы пользователь мог снова войти в систему и увидеть, что обработка завершена.
Примечания к архитектуре пакетного сервера.
Это сервер WSGI, который ожидает на порту запроса пакетной обработки. Запрос представляет собой REST POST с идентификационным номером; пакетный процессор находит это в базе данных и обрабатывает.
Сервер запускается автоматически нашим интерфейсом REST. Если он не запущен, мы его создаем. Это делает транзакцию пользователя медленной, но, да ладно. Он не должен вылетать.
Кроме того, у нас есть простой crontab для проверки его работы. Максимум 30 минут между "вы живы?" чеки. У нас нет формального сценария запуска (мы работаем под Apache с mod_wsgi), но мы можем создать сценарий «перезапуска», который касается файла WSGI, а затем выполняет POST-запрос на URL-адрес, который выполняет проверку работоспособности (и запускает пакетный процессор).
Когда пакетный сервер запускается, могут быть необработанные запросы, для которых он никогда не получал POST. Итак, запуск по умолчанию - это вытащить ВСЮ работу из очереди запросов - при условии, что он мог что-то упустить.
мы его порождаем. Это делает транзакцию пользователя медленной, но, да ладно. Он не должен вылетать.Кроме того, у нас есть простой crontab для проверки его работы. Максимум 30 минут между "вы живы?" чеки. У нас нет формального сценария запуска (мы работаем под Apache с mod_wsgi), но мы можем создать сценарий «перезапуска», который касается файла WSGI, а затем выполняет POST-запрос на URL-адрес, который выполняет проверку работоспособности (и запускает пакетный процессор).
Когда пакетный сервер запускается, могут быть необработанные запросы, для которых он никогда не получал POST. Итак, запуск по умолчанию - это вытащить ВСЮ работу из очереди запросов - при условии, что он мог что-то упустить.
мы его порождаем. Это делает транзакцию пользователя медленной, но, да ладно. Он не должен вылетать.Кроме того, у нас есть простой crontab для проверки его работы. Максимум 30 минут между "вы живы?" чеки. У нас нет формального сценария запуска (мы работаем под Apache с mod_wsgi), но мы можем создать сценарий «перезапуска», который касается файла WSGI, а затем выполняет POST-запрос на URL-адрес, который выполняет проверку работоспособности (и запускает пакетный процессор).
Когда пакетный сервер запускается, могут быть необработанные запросы, для которых он никогда не получал POST. Итак, запуск по умолчанию - это вытащить ВСЮ работу из очереди запросов - при условии, что он мог что-то упустить.
у нас есть простой crontab для проверки его работы. Максимум 30 минут между "вы живы?" чеки. У нас нет формального сценария запуска (мы работаем под Apache с mod_wsgi), но мы можем создать сценарий «перезапуска», который касается файла WSGI, а затем выполняет POST-запрос на URL-адрес, который выполняет проверку работоспособности (и запускает пакетный процессор).Когда пакетный сервер запускается, могут быть необработанные запросы, для которых он никогда не получал POST. Итак, запуск по умолчанию - это вытащить ВСЮ работу из очереди запросов - при условии, что он мог что-то упустить.
у нас есть простой crontab для проверки его работы. Максимум 30 минут между "вы живы?" чеки. У нас нет формального сценария запуска (мы работаем под Apache с mod_wsgi), но мы можем создать сценарий «перезапуска», который касается файла WSGI, а затем выполняет POST-запрос на URL-адрес, который выполняет проверку работоспособности (и запускает пакетный процессор).Когда пакетный сервер запускается, могут быть необработанные запросы, для которых он никогда не получал POST. Итак, запуск по умолчанию - это вытащить ВСЮ работу из очереди запросов - при условии, что он мог что-то упустить.
сценарий, который касается файла WSGI, а затем выполняет POST для URL-адреса, который выполняет проверку работоспособности (и запускает пакетный процессор).Когда пакетный сервер запускается, могут быть необработанные запросы, для которых он никогда не получал POST , Итак, запуск по умолчанию - это вытащить ВСЮ работу из очереди запросов - при условии, что он мог что-то упустить.
сценарий, который касается файла WSGI, а затем выполняет POST для URL-адреса, который выполняет проверку работоспособности (и запускает пакетный процессор).Когда пакетный сервер запускается, могут быть необработанные запросы, для которых он никогда не получал POST , Итак, запуск по умолчанию - это вытащить ВСЮ работу из очереди запросов - при условии, что он мог что-то упустить.
Итак, вам нужна очередь заданий. В вашем случае я бы абсолютно согласился с БД для сохранения состояния, даже если эти состояния недолговечны. Похоже, это удовлетворит все ваши требования, и реализовать его не так уж сложно, поскольку у вас уже есть все движущиеся части, доступные вам. Не усложняйте, если вам не требуется что-то более сложное.
Если вам нужно что-то более мощное или более сложное, я бы посмотрел на что-то вроде Gearman .
Я знаю, что это старый вопрос, но кто-то может Нахожу мой ответ полезным даже по прошествии всего этого времени, поэтому приступим.
Вы, конечно, можете использовать базу данных в качестве очереди, но есть решения, разработанные именно для этой цели.
AMQP создан именно для этого. Вместе с Celery или Carrot и сервером-брокером, например RabbitMQ или ZeroMQ .
That ' это то, что мы используем в нашем последнем проекте, и он отлично работает.
Для вашей проблемы лучше всего подходят Celery и RabbitMQ. RabbitMQ обеспечивает постоянство ваших сообщений, а Celery предоставляет простые представления для опроса, чтобы проверить состояние процессов, запущенных параллельно.
Вас также может заинтересовать octopy .