У меня есть сайт Django, а на одной странице есть кнопка (или ссылка), которая при нажатии запускает несколько долгую задачу. Очевидно, что я хочу запустить эту задачу в качестве фоновой задачи и немедленно вернуть результат пользователю. Я хочу реализовать это, используя простой подход, который не потребует от меня установки и изучения целой новой архитектуры обмена сообщениями, например, Celery. Я не хочу использовать сельдерей! Я просто хочу использовать простой подход, который я могу настроить и запустить в течение следующих полчаса или около того. Разве нет простого способа сделать это в Django, не добавляя (еще один) пакет сторонних разработчиков?Простой подход к запуску фоновой задачи в Django
ответ
Просто используйте нить.
import threading
t = threading.Thread(target=long_process,
args=args,
kwargs=kwargs)
t.setDaemon(True)
t.start()
return HttpResponse()
Смотрите этот вопрос для более подробной информации: Can Django do multi-thread works?
Если вы готовы установить 3-ю библиотеку партии, но вы хотите что-то гораздо проще, чем сельдерей, проверьте Redis очередь. Это требует Redis, который довольно легко сам по себе, но это также может обеспечить множество других преимуществ.
У самой RQ почти нулевая конфигурация. Это потрясающе просто.
Ссылки:
Посмотрите на django-background-tasks - это именно то, что вам нужно, и не нуждается в какой-либо дополнительные сервисы, которые будут работать как RabbitMQ или Redis. Он управляет очередью задач в базе данных и имеет команду управления Django, которую вы можете запускать один раз или как задание cron.
Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. - [Обзор] (/ review/low-quality-posts/11499101) – Rao
@ Rao Ссылка указывает на модуль, который решает проблему, а не описание того, как решить проблему. Я не знаю, как еще переписать пост, может быть, у вас есть несколько советов? – user226114
Этот модуль работает только с Django 1.4 до 1.8. – aboutaaron
- 1. Подход к выполнению фоновой задачи в телефонной связке
- 2. Лучший подход к выполнению фоновой задачи во время работы приложения
- 3. django простой подход к многопользовательскому поиску
- 4. Каков правильный подход к запуску приложения GWT?
- 5. Самый краткий способ запуска простой фоновой задачи?
- 6. Подход к запуску/остановке работы в определенное время
- 7. Отключение фоновой задачи
- 8. Лучший подход к фоновой обработке/API-вызову?
- 9. Лучший подход к запуску программирования клиентского сервера в perl?
- 10. Ошибка фоновой задачи UWP
- 11. JavaFX завершение фоновой задачи
- 12. Несколько экземпляров фоновой задачи
- 13. IntentService для фоновой задачи
- 14. Порядок очередей фоновой задачи
- 15. Запуск фоновой задачи в JavaFX
- 16. Запуск фоновой задачи в UWP
- 17. Выполнение фоновой задачи в Javascript
- 18. Выполнение фоновой задачи в java
- 19. Libssh2: предотвратить выполнение фоновой задачи
- 20. Django Сухой подход к get_queryset
- 21. Подход к шаблону Django- Template
- 22. Имитация фоновой задачи на AppHarbor
- 23. Фоновый режим против фоновой задачи
- 24. Сохранение только одной фоновой задачи
- 25. Поведение фоновой задачи, вызванное отладчиком?
- 26. Профилирование использования памяти фоновой задачи
- 27. Обновление плитки из фоновой задачи
- 28. Запись данных из фоновой задачи
- 29. catching error Код фоновой задачи
- 30. Расписание фоновой задачи с Sidekiq
Вы можете просто вернуть сервер на запрос Полученный тип ответа. Тогда, если опрос или веб-сайты не являются опцией, просто установите обновление сервера на процентное значение, возможно, каждые 10% или 25%. И у вас есть определенная область для проверки всеми запущенными процессами и отображения процента завершения. Таким образом, браузер только поражает сервер, когда пользователь переходит к обновленной странице процесса или обновляет ее. Затем, если процесс имеет 100% завершение, есть ссылка на результаты. Просто некоторые идеи. –
Примечание. Сервер, обновляющий процентное значение, находится только на сервере [например, значение DB]. Это может быть запрошено, если пользователь переходит к данной странице. Также это будет зависеть от того, как ваша инфраструктура может обрабатывать параллельные соединения. Ход процесса может блокироваться, поэтому вам может потребоваться изучить нечто вроде торнадо. –
Я очень сомневаюсь, что все, что вы пишете, будет проще, чем просто установить Celery и сделать с ним. –