使用Rabbitmq在Celery 4.0.2上运行Python 3.5.2程序

时间:2016-12-31 14:20:45

标签: python rabbitmq celery

我正在学习如何使用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.

有人可以告知这里发生了什么吗?导致这种情况发生的原因以及如何解决?事实上,我一直在与芹菜苦苦挣扎数小时,老实说,这对我的学习道路来说是相当痛苦的。非常感激您的帮忙。

2 个答案:

答案 0 :(得分:0)

可能是登录/密码问题。

检查您对Rabbitmq数据库的访问权限。

答案 1 :(得分:0)

我似乎可以通过将Celery 4.0.2切换到3.1.0来解决此问题。希望此版本不会与其他应用程序发生其他崩溃。