我正在学习 Celery 教程。他们正在使用 Python2,而我正在尝试使用 python3 实现相同的功能。
我有 2 个文件:
celery_proj.py:
from celery import Celery
app = Celery(
'proj', broker='amqp://', backend='amqp://', include=['proj.tasks'])
app.conf.update(Celery_TAST_RESULT_EXPIRES=3600,)
if __name__ == '__main__':
app.start()
和tasks.py:
from celery_proj import app
@app.task
def add(x, y):
return x + y
@app.task
def mul(x, y):
return x * y
@app.task
def xsum(numbers):
return sum(numbers)
当我尝试运行 celery -A proj worker -l info
时,我得到:
Traceback (most recent call last):
File "/usr/local/lib/python3.4/dist-packages/celery/app/utils.py", line 235, in find_app
found = sym.app
AttributeError: 'module' object has no attribute 'app'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/bin/celery", line 11, in <module>
sys.exit(main())
File "/usr/local/lib/python3.4/dist-packages/celery/__main__.py", line 30, in main
main()
File "/usr/local/lib/python3.4/dist-packages/celery/bin/celery.py", line 81, in main
cmd.execute_from_commandline(argv)
File "/usr/local/lib/python3.4/dist-packages/celery/bin/celery.py", line 769, in execute_from_commandline
super(CeleryCommand, self).execute_from_commandline(argv)))
File "/usr/local/lib/python3.4/dist-packages/celery/bin/base.py", line 309, in execute_from_commandline
argv = self.setup_app_from_commandline(argv)
File "/usr/local/lib/python3.4/dist-packages/celery/bin/base.py", line 469, in setup_app_from_commandline
self.app = self.find_app(app)
File "/usr/local/lib/python3.4/dist-packages/celery/bin/base.py", line 489, in find_app
return find_app(app, symbol_by_name=self.symbol_by_name)
File "/usr/local/lib/python3.4/dist-packages/celery/app/utils.py", line 240, in find_app
found = sym.celery
AttributeError: 'module' object has no attribute 'celery'
我做错了什么以及如何解决这个问题?
最佳答案
当你使用 celery -A proj worker
运行 Celery 时
AttributeError: 'module' object has no attribute 'app'
...
AttributeError: 'module' object has no attribute 'celery'
告诉你它试图找到:
a) app
实例
b) proj.celery
模块
因此,您可以将 from celery_proj import app
添加到 __init__.py
或将 celery_proj.py
重命名为 celery.py
。
或者您可以将 Celery 作为 celery -A proj.celery_proj worker
我找到了答案 here因为这里没有关于 stackoverflow 的答案对我有帮助。
关于python - 使用 Python 3 时,Celery 'module' 对象没有属性 'app',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30743267/