В целях тестирования вы можете запустить сервер разработки django в однопоточном режиме: python manage.py runserver --nothreading
.
Вы хотите import theano
только в процессе работы сельдерея, а не в процессе веб-сервера django, правильно? Хорошо, давайте сделаем импорт условным, чтобы он был импортирован в сельдерей, а не в джанго.
import os
try:
# next line will raise exception in django, but will work fine in celery
is_worker = os.environ['celery_worker']
import theano # celery will import theano, django won't
except Exception as exc:
# django code will catch exception that celery_worker doesn't exist and print it here
print exc
И начать сельдерей работник с переменной celery_worker
среды набором:
celery_worker=yes celery -A celery_try worker -l info
различать сельдерея работник и Джанго, давайте установить переменную Баш среду в процессе сельдерея, но не в процессе Джанго. Я назвал эту переменную celery_worker
. Чтобы установить его, я добавил celery -A celery_try worker -l info
с per-command env variable assignment: celery_worker=yes
. Теперь, в коде python, я проверяю, присутствует ли переменная среды. Если это так, мы работаем с сельдереем и должны импортировать анано.
Если мы находимся в django, os.environ['celery_worker']
не должен определяться и должен возбуждать исключение.
Я не уверен, почему запуск обоих процессов означает, что вам нужно импортировать модуль в обоих. Если вы не хотите импортировать его в один из них, просто не делайте этого. –
В представлении Django я импортирую задачи, поэтому сервер Django импортирует те же модули tasks.py import, в то время как сельдерей импортирует любые задачи. Также импортирует импорт, так как оба процесса импортируют модуль. – Demonedge
сам по себе сельдерей работает вне django! это то, как вы его инициализируете, например. если ваш модуль загружает все стеки django и все ваши приложения django – Jerzyk