Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django Celery socket.error [Errno 61] Connection refused

I'm running Redis, Celery 4.0 and Django 1.10 but receive a [Errrno 61] connection refused error when running task 'test' from shell. This is my project structure:

myproj
│
├── app1
    ├── __init__.py
    ├── tasks.py
    myproj
    ├── __init__.py
    ├── urls.py
    ├── settings
    │   ├── __init__.py
    │   ├── base.py
    │   ├── local.py
    ├── local
    │   ├── __init__.py
    │   ├── celery.py
    │   ├── wsgi.py

myproj/app1/tasks.py:

from __future__ import absolute_import
from celery import task

@task(name='app1.tasks.test')
def test():
    print('this is a test')

myproj/myproj/local/celery.py:

from __future__ import absolute_import
import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproj.settings.local')
app = Celery('myproj_local')

app.config_from_object('django.conf:settings')
app.autodiscover_tasks()

myproj/myproj/local/__init__.py:

from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app
__all__ = ['celery_app']

I think something is wrong in this init file because the task runs from shell when I move the content to myproj/myproj/__init__.py:

from __future__ import absolute_import, unicode_literals

from .local.celery import app as celery_app

__all__ = ['celery_app']

Celery is running in the myproj directory with command:

celery -A myproj.local.celery worker -l info

The full error:

python manage.py shell --settings=myproj.settings.local
(InteractiveConsole)
>>> from app1.tasks import test
>>> test.delay()
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File env/lib/python2.7/site-packages/celery/app/task.py", line 413, in delay
return self.apply_async(args, kwargs)
  File env/lib/python2.7/site-packages/celery/app/task.py", line 536, in apply_async
**options
  File env/lib/python2.7/site-packages/celery/app/base.py", line 717, in send_task
amqp.send_task_message(P, name, message, **options)
  File env/lib/python2.7/site-packages/celery/app/amqp.py", line 554, in send_task_message
**properties
  File env/lib/python2.7/site-packages/kombu/messaging.py", line 178, in publish
exchange_name, declare,
 File env/lib/python2.7/site-packages/kombu/connection.py", line 527, in _ensured
errback and errback(exc, 0)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/contextlib.py", line 35, in __exit__
self.gen.throw(type, value, traceback)
  File env/lib/python2.7/site-packages/kombu/connection.py", line 419, in _reraise_as_library_errors
sys.exc_info()[2])
  File env/lib/python2.7/site-packages/kombu/connection.py", line 414, in _reraise_as_library_errors
yield
  File env/lib/python2.7/site-packages/kombu/connection.py", line 515, in _ensured
reraise_as_library_errors=False,
  File env/lib/python2.7/site-packages/kombu/connection.py", line 405, in ensure_connection
callback)
  File env/lib/python2.7/site-packages/kombu/utils/functional.py", line 333, in retry_over_time
return fun(*args, **kwargs)
  File env/lib/python2.7/site-packages/kombu/connection.py", line 261, in connect
return self.connection
  File env/lib/python2.7/site-packages/kombu/connection.py", line 802, in connection
self._connection = self._establish_connection()
  File env/lib/python2.7/site-packages/kombu/connection.py", line 757, in _establish_connection
conn = self.transport.establish_connection()
  File env/lib/python2.7/site-packages/kombu/transport/pyamqp.py", line 130, in establish_connection
conn.connect()
  File env/lib/python2.7/site-packages/amqp/connection.py", line 294, in connect
self.transport.connect()
  File env/lib/python2.7/site-packages/amqp/transport.py", line 103, in connect
self._connect(self.host, self.port, self.connect_timeout)
  File env/lib/python2.7/site-packages/amqp/transport.py", line 144, in _connect
self.sock.connect(sa)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 228, in meth
return getattr(self._sock,name)(*args)
OperationalError: [Errno 61] Connection refused
like image 822
Toon Avatar asked Sep 19 '25 23:09

Toon


2 Answers

Yeah! I got it! I had same problem. In file myproj/app1/tasks.py:

from __future__ import absolute_import
from celery import task
app = Celery('myproj_local')
app.config_from_object('django.conf:settings')
@app.task(name='random_name')
def test():
    print('this is a test')

Then, celery will be initialized in "app", and config will be loaded in "app", and your task will be delayed.

But it will work only if your config is valid.

like image 132
Владимир Закотнев Avatar answered Sep 22 '25 14:09

Владимир Закотнев


You need to set the BROKER_URL to point to REDIS.

If you have one queue only, make sure your worker is connected to default queue.

If you specified default queue in your settings, you need to set your worker to pickup task as below:

celery -A myproj.local.celery worker -l info -Q queue_name

like image 29
kkiat Avatar answered Sep 22 '25 12:09

kkiat