2017-02-09 33 views
1

私はdjangoを使ってセロリを使ってスケジュールされたタスクをセットアップしようとしています。私はthe first steps w/ Celerythe first steps w/ Djangoチュートリアルを見てみましたが、どちらも私のために働いていません。ここでは、関連するファイルと私のプロジェクトのレイアウトです:ImportError: 'tasks'という名前のモジュールがありません

Pythonは3.5.1

ジャンゴ1.10

セロリ4.0.2

RabbitMQの3.6.6

OTP 19.2

mysite/ (project name) 
    polls/ (myapp) 
     tasks 
     ... 
    mysite/ 
     __init__ 
     celery 
     settings 
     ... 
    manage 
    ... 

mysite/__ init__.py:

from __future__ import absolute_import, unicode_literals 

# This will make sure the app is always imported when 
# Django starts so that shared_task will use this app. 
from .celery import app as celery_app 

__all__ = ['celery_app'] 

世論調査/ celery.py:

from __future__ import absolute_import, unicode_literals 
import os 
from celery import Celery 

# set the default Django settings module for the 'celery' program. 
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings') 

app = Celery('mysite', backend='amqp', broker='amqp://[email protected]//',include=['polls.tasks']) 

# Using a string here means the worker don't have to serialize 
# the configuration object to child processes. 
# - namespace='CELERY' means all celery-related configuration keys 
# should have a `CELERY_` prefix. 
app.config_from_object('django.conf:settings', namespace='CELERY') 

# Load task modules from all registered Django app configs. 
app.autodiscover_tasks() 


@app.task(bind=True) 
def debug_task(self): 
    print('Request: {0!r}'.format(self.request)) 

世論調査/ tasks.py:

# Create your tasks here 
from __future__ import absolute_import, unicode_literals 
from celery import shared_task 


@shared_task 
def add(x, y): 
    return x + y 


@shared_task 
def mul(x, y): 
    return x * y 


@shared_task 
def xsum(numbers): 
    return sum(numbers) 

私が実行しようとした:

\mysite> celery -A tasks worker --loglevel=info 

をし、その結果は以下のとおりであった:

Traceback (most recent call last): File "c:\users\username\appdata\local\programs\python\python35\lib\runpy.py", line 170, in _run_module_as_main 
    "__main__", mod_spec) 
    File "c:\users\username\appdata\local\programs\python\python35\lib\runpy.py", line 85, in _run_code 
    exec(code, run_globals) 
    File "C:\Users\username\AppData\Local\Programs\Python\Python35\Scripts\celery.exe\__main__.py", line 9, in <module> 
    File "c:\users\username\appdata\local\programs\python\python35\lib\site-packages\celery\__main__.py", line 14, in main 
    _main() 
    File "c:\users\username\appdata\local\programs\python\python35\lib\site-packages\celery\bin\celery.py", line 326, in main 
    cmd.execute_from_commandline(argv) 
    File "c:\users\username\appdata\local\programs\python\python35\lib\site-packages\celery\bin\celery.py", line 488, in execute_from_commandline 
    super(CeleryCommand, self).execute_from_commandline(argv))) 
    File "c:\users\username\appdata\local\programs\python\python35\lib\site-packages\celery\bin\base.py", line 279, in execute_from_commandline 
    argv = self.setup_app_from_commandline(argv) 
    File "c:\users\username\appdata\local\programs\python\python35\lib\site-packages\celery\bin\base.py", line 481, in setup_app_from_commandline 
    self.app = self.find_app(app) 
    File "c:\users\username\appdata\local\programs\python\python35\lib\site-packages\celery\bin\base.py", line 503, in find_app 
    return find_app(app, symbol_by_name=self.symbol_by_name) 
    File "c:\users\username\appdata\local\programs\python\python35\lib\site-packages\celery\app\utils.py", line 355, in find_app 
    sym = symbol_by_name(app, imp=imp) 
    File "c:\users\username\appdata\local\programs\python\python35\lib\site-packages\celery\bin\base.py", line 506, in symbol_by_name 
    return imports.symbol_by_name(name, imp=imp) 
    File "c:\users\username\appdata\local\programs\python\python35\lib\site-packages\kombu\utils\imports.py", line 56, in symbol_by_name 
    module = imp(module_name, package=package, **kwargs) 
    File "c:\users\username\appdata\local\programs\python\python35\lib\site-packages\celery\utils\imports.py", line 101, in import_from_cwd 
    return imp(module, package=package) 
    File "c:\users\username\appdata\local\programs\python\python35\lib\importlib\__init__.py", line 126, in import_module 
    return _bootstrap._gcd_import(name[level:], package, level) 
    File "<frozen importlib._bootstrap>", line 986, in _gcd_import 
    File "<frozen importlib._bootstrap>", line 969, in _find_and_load 
    File "<frozen importlib._bootstrap>", line 956, in _find_and_load_unlocked 
ImportError: No module named 'tasks' 
+1

pollsディレクトリの中に '__init __。py'を追加してください。 –

+0

私はまだ同じエラーが発生します、私はそれの中に何かを置くと思いますか? – user2361174

+1

あなたの問題は、このステートメント 'セロリ - Aタスクワーカー--loglevel = info'にあると思います。 「仕事」と呼ばれるものは何もありません。例えばセロリを実行してセロリを実行する--app = mysite –

答えて

5

問題は、この行である:外側の個人用サイトのフォルダにはtasks.pyファイルがありません

\mysite> celery -A tasks worker --loglevel=info 

が、私は何が必要だと思う

\mysite> celery -A polls/tasks worker --loglevel=info 

ですOr:

\mysite> celery worker --app=mysite --loglevel=info 
\mysite> celery worker -A proj -loglevel=info 

このコマンドを実行している場所が間違っています。

+0

私が持っていた問題、自分自身のスロープの犠牲者にコメントを追加したかったのです。悪意のある名前が名前空間に衝突を起こし、PyCharmが物事を「管理」してインポートパスを変更しました。これは決して起こらない何年もの間、私の間違いでした。私のvenv '... venv/bin/celery'のファイルは' main'インポートを編集しました。このファイルはVCSにはなく、venvが編集からロックされていないため、検索するのに少し時間がかかりました。不注意と15分失われた完璧な嵐... –

関連する問題