我正在尝试按照文档开始使用celery,但遇到了难以调试示例代码的问题。我不知道我是否遇到了同样问题的两个方面,或两个独特的问题。我可以通过shell建立与SQS队列的连接,但不能与django连接。我不知道该行为与导入Celery与导入任务的问题的关系是什么。
此处的“使用入门”指南: http://celery.github.com/celery/getting-started/first-steps-with-celery.html#running-the-celery-worker-server
显示代码
from celery import Celery
如果我从python shell运行它,这段代码有效,但是,如果我在eclipse中的tasks.py中的django项目中执行此操作,我会收到错误Unresolved Import:Celery。
这里有一个单独的指南:http://celery.github.com/celery/django/first-steps-with-django.html代表django,而不是
from celery import task
然而,当我继续本教程并致电
时,哪个可以解决add.delay(2, 2)
我收到连接失败,看起来好像它仍然试图仍然使用rabbitmq而不是SQS我有我的django项目设置使用(这有效,我可以从亚马逊的网络界面看到SQS队列,我如果我使用celery import Celery从shell执行所有操作,则可以建立连接。如果相关,则为堆栈跟踪:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/celery/app/task.py", line 343, in delay
return self.apply_async(args, kwargs)
File "/usr/local/lib/python2.7/dist-packages/celery/app/task.py", line 458, in apply_async
with app.producer_or_acquire(producer) as P:
File "/usr/lib/python2.7/contextlib.py", line 17, in __enter__
return self.gen.next()
File "/usr/local/lib/python2.7/dist-packages/celery/app/base.py", line 247, in producer_or_acquire
with self.amqp.producer_pool.acquire(block=True) as producer:
File "/usr/local/lib/python2.7/dist-packages/kombu/connection.py", line 705, in acquire
R = self.prepare(R)
File "/usr/local/lib/python2.7/dist-packages/kombu/pools.py", line 54, in prepare
p = p()
File "/usr/local/lib/python2.7/dist-packages/kombu/pools.py", line 45, in <lambda>
return lambda: self.create_producer()
File "/usr/local/lib/python2.7/dist-packages/kombu/pools.py", line 42, in create_producer
return self.Producer(self._acquire_connection())
File "/usr/local/lib/python2.7/dist-packages/celery/app/amqp.py", line 160, in __init__
super(TaskProducer, self).__init__(channel, exchange, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/kombu/messaging.py", line 83, in __init__
self.revive(self.channel)
File "/usr/local/lib/python2.7/dist-packages/kombu/messaging.py", line 174, in revive
channel = self.channel = maybe_channel(channel)
File "/usr/local/lib/python2.7/dist-packages/kombu/connection.py", line 879, in maybe_channel
return channel.default_channel
File "/usr/local/lib/python2.7/dist-packages/kombu/connection.py", line 617, in default_channel
self.connection
File "/usr/local/lib/python2.7/dist-packages/kombu/connection.py", line 610, in connection
self._connection = self._establish_connection()
File "/usr/local/lib/python2.7/dist-packages/kombu/connection.py", line 569, in _establish_connection
conn = self.transport.establish_connection()
File "/usr/local/lib/python2.7/dist-packages/kombu/transport/amqplib.py", line 279, in establish_connection
connect_timeout=conninfo.connect_timeout)
File "/usr/local/lib/python2.7/dist-packages/kombu/transport/amqplib.py", line 90, in __init__
super(Connection, self).__init__(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/amqplib/client_0_8/connection.py", line 129, in __init__
self.transport = create_transport(host, connect_timeout, ssl)
File "/usr/local/lib/python2.7/dist-packages/amqplib/client_0_8/transport.py", line 281, in create_transport
return TCPTransport(host, connect_timeout)
File "/usr/local/lib/python2.7/dist-packages/amqplib/client_0_8/transport.py", line 85, in __init__
raise socket.error, msg
socket.error: [Errno 111] Connection refused
在settings.py中,我使用我的SQS网址正确配置了BROKER_URL(并且在密码中没有正斜杠,这显然是过去的一个问题)。
所以
答案 0 :(得分:1)
如何使用manage.py shell
?
您是否已将import djcelery; djcelery.setup_loader()
添加到settings.py
的顶部?
芹菜和django芹菜的API现在有所不同,因为django-celery落后了。 Celery 3.1将支持Django开箱即用,因此新API可以在任何地方使用。
关于有趣的日食事件。 Eclipse是否可以使用静态分析来查找模块中的符号?在这种情况下,将以下内容添加到celery / init .py文件中是否有帮助:
__all__ = ['Celery']