テスト目的のために、django開発サーバをシングルスレッドモードで実行することができます:python manage.py runserver --nothreading
。
あなたはimport theano
だけセロリのワーカープロセスでは、djangoのWebサーバーのプロセスではなく、右にしたいですか?さて、インポートを条件付きにして、それがセロリでインポートされ、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
環境変数セットを使用してセロリの労働者を起動しますのはなく、Djangoの過程で、セロリの過程で、bashの環境変数を設定してみましょう、セロリの労働者とDjangoを区別するために
celery_worker=yes celery -A celery_try worker -l info
。私はその変数celery_worker
を呼び出しました。それを設定するために、私はper-command env variable assignment:celery_worker=yes
とcelery -A celery_try worker -l info
を前に追加しました。今、Pythonコードで、私は環境変数が存在するかどうかをチェックします。そうであれば、私たちはセロリの労働者であり、theanoをインポートする必要があります。
私たちがdjangoの場合は、os.environ['celery_worker']
を定義してはならず、例外が発生するはずです。
なぜ両方のプロセスを実行すると、両方でモジュールをインポートする必要があるのか分かりません。あなたがそれらのいずれかでそれをインポートしたくない場合は、しないでください。 –
Djangoのビューでは、Djangoサーバーがタスクモジュールのインポートと同じモジュールをインポートします。セロリは、どのようなタスクもimportするので、両方のプロセスがモジュールをインポートする方法です。 – Demonedge
セロリ自体はデフォルトでジャンゴの外で実行されています! 問題を初期化する方法です(例:あなたのモジュールがすべてのdjangoスタックとすべてのdjangoアプリケーションをロードしている場合 – Jerzyk