我正在学习如何使用Celery与Rabbitmq进行预定的python任务,并遇到连接问题。具体来说,我尝试从网上提供的示例(https://github.com/jimmykobe1171/celery-demo/tree/master)中学习。结构和语法如下:
结构:
test_celery
__init__.py
celery.py
tasks.py
run_tasks.py
celery.py:
from __future__ import absolute_import, unicode_literals
from celery import Celery
app = Celery('test_celery',
broker='amqp://john:password@localhost/john_vhost',
backend='rpc://',
include=['test_celery.tasks'])
tasks.py:
from __future__ import absolute_import
from test_celery.celery import app
import time
@app.task
def longtime_add(x, y):
print ('long time task begins')
# sleep 5 seconds
time.sleep(5)
print ('long time task finished')
return (x + y)
run_tasks.py:
from .tasks import longtime_add
import time
if __name__ == '__main__':
result = longtime_add.delay(1,2)
# at this time, our task is not finished, so it will return False
print ('Task finished? ', result.ready())
print ('Task result: ', result.result)
# sleep 10 seconds to ensure the task has been finished
time.sleep(10)
# now the task should be finished and ready method will return True
print ('Task finished? ', result.ready())
print ('Task result: ', result.result)
然后我跑:
$ celery -A test_celery worker --loglevel=info
然后服务器首先建立连接但后来被拒绝,并显示以下消息:
-------------- celery@DOECOMPUTER v4.0.2 (latentcall)
---- **** -----
--- * *** * -- Windows-7-6.1.7601-SP1 2016-12-31 22:04:54
-- * - **** ---
- ** ---------- [config]
- ** ---------- .> app: test_celery:0x3d2b828
- ** ---------- .> transport: amqp://john:**@localhost:5672/john_vhost
- ** ---------- .> results: rpc://
- *** --- * --- .> concurrency: 4 (prefork)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** -----
-------------- [queues]
.> celery exchange=celery(direct) key=celery
[tasks]
. test_celery.tasks.longtime_add
...
_winapi.DUPLICATE_SAME_ACCESS | _winapi.DUPLICATE_CLOSE_SOURCE)
PermissionError: [WinError 5] Access Denied.
有人可以告知这里发生了什么吗?导致这种情况发生的原因以及如何解决?事实上,我一直在与芹菜苦苦挣扎数小时,老实说,这对我的学习道路来说是相当痛苦的。非常感激您的帮忙。
答案 0 :(得分:0)
可能是登录/密码问题。
检查您对Rabbitmq数据库的访问权限。
答案 1 :(得分:0)
我似乎可以通过将Celery 4.0.2切换到3.1.0来解决此问题。希望此版本不会与其他应用程序发生其他崩溃。