[英]Django Celery task.delay() returns kombu Error Exception and Hangs on task on Runserver Using Redis
Currently using django and celery i have done my configuration and installed redis and redis is actually active i have check using the cli also when i run python manage.py shell
and run a task it works perfectly but when i access the task by calling it from a view i get this error Currently using django and celery i have done my configuration and installed redis and redis is actually active i have check using the cli also when i run
python manage.py shell
and run a task it works perfectly but when i access the task by calling it from一个视图我得到这个错误
Internal Server Error: /contact/
Traceback (most recent call last):
File "/home/codertjay/.virtualenvs/Gimsap-Ecommerce/lib/python3.9/site-packages/kombu/utils/functional.py", line 30, in __call__
return self.__value__
AttributeError: 'ChannelPromise' object has no attribute '__value__'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/codertjay/.virtualenvs/Gimsap-Ecommerce/lib/python3.9/site-packages/amqp/transport.py", line 188, in _connect
entries = socket.getaddrinfo(
File "/usr/local/lib/python3.9/socket.py", line 953, in getaddrinfo
for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -9] Address family for hostname not supported
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/codertjay/.virtualenvs/Gimsap-Ecommerce/lib/python3.9/site-packages/kombu/connection.py", line 446, in _reraise_as_library_errors
yield
File "/home/codertjay/.virtualenvs/Gimsap-Ecommerce/lib/python3.9/site-packages/kombu/connection.py", line 433, in _ensure_connection
return retry_over_time(
File "/home/codertjay/.virtualenvs/Gimsap-Ecommerce/lib/python3.9/site-packages/kombu/utils/functional.py", line 312, in retry_over_time
return fun(*args, **kwargs)
File "/home/codertjay/.virtualenvs/Gimsap-Ecommerce/lib/python3.9/site-packages/kombu/connection.py", line 877, in _connection_factory
self._connection = self._establish_connection()
File "/home/codertjay/.virtualenvs/Gimsap-Ecommerce/lib/python3.9/site-packages/kombu/connection.py", line 812, in _establish_connection
conn = self.transport.establish_connection()
File "/home/codertjay/.virtualenvs/Gimsap-Ecommerce/lib/python3.9/site-packages/kombu/transport/pyamqp.py", line 201, in establish_connection
conn.connect()
File "/home/codertjay/.virtualenvs/Gimsap-Ecommerce/lib/python3.9/site-packages/amqp/connection.py", line 323, in connect
self.transport.connect()
File "/home/codertjay/.virtualenvs/Gimsap-Ecommerce/lib/python3.9/site-packages/amqp/transport.py", line 129, in connect
self._connect(self.host, self.port, self.connect_timeout)
File "/home/codertjay/.virtualenvs/Gimsap-Ecommerce/lib/python3.9/site-packages/amqp/transport.py", line 197, in _connect
raise (e
File "/home/codertjay/.virtualenvs/Gimsap-Ecommerce/lib/python3.9/site-packages/amqp/transport.py", line 213, in _connect
self.sock.connect(sa)
ConnectionRefusedError: [Errno 111] Connection refused
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/codertjay/.virtualenvs/Gimsap-Ecommerce/lib/python3.9/site-packages/django/core/handlers/exception.py", line 55, in inner
response = get_response(request)
File "/home/codertjay/.virtualenvs/Gimsap-Ecommerce/lib/python3.9/site-packages/django/core/handlers/base.py", line 197, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/codertjay/.virtualenvs/Gimsap-Ecommerce/lib/python3.9/site-packages/django/views/generic/base.py", line 84, in view
return self.dispatch(request, *args, **kwargs)
File "/home/codertjay/.virtualenvs/Gimsap-Ecommerce/lib/python3.9/site-packages/django/views/generic/base.py", line 119, in dispatch
return handler(request, *args, **kwargs)
File "/mnt/c/Users/Codertjay/PycharmProjects/freelance/Gimsap-Ecommerce/home/views.py", line 102, in post
send_support_message.delay(
File "/home/codertjay/.virtualenvs/Gimsap-Ecommerce/lib/python3.9/site-packages/celery/app/task.py", line 425, in delay
return self.apply_async(args, kwargs)
File "/home/codertjay/.virtualenvs/Gimsap-Ecommerce/lib/python3.9/site-packages/celery/app/task.py", line 575, in apply_async
return app.send_task(
File "/home/codertjay/.virtualenvs/Gimsap-Ecommerce/lib/python3.9/site-packages/celery/app/base.py", line 788, in send_task
amqp.send_task_message(P, name, message, **options)
File "/home/codertjay/.virtualenvs/Gimsap-Ecommerce/lib/python3.9/site-packages/celery/app/amqp.py", line 510, in send_task_message
ret = producer.publish(
File "/home/codertjay/.virtualenvs/Gimsap-Ecommerce/lib/python3.9/site-packages/kombu/messaging.py", line 177, in publish
return _publish(
File "/home/codertjay/.virtualenvs/Gimsap-Ecommerce/lib/python3.9/site-packages/kombu/connection.py", line 523, in _ensured
return fun(*args, **kwargs)
File "/home/codertjay/.virtualenvs/Gimsap-Ecommerce/lib/python3.9/site-packages/kombu/messaging.py", line 186, in _publish
channel = self.channel
File "/home/codertjay/.virtualenvs/Gimsap-Ecommerce/lib/python3.9/site-packages/kombu/messaging.py", line 209, in _get_channel
channel = self._channel = channel()
File "/home/codertjay/.virtualenvs/Gimsap-Ecommerce/lib/python3.9/site-packages/kombu/utils/functional.py", line 32, in __call__
value = self.__value__ = self.__contract__()
File "/home/codertjay/.virtualenvs/Gimsap-Ecommerce/lib/python3.9/site-packages/kombu/messaging.py", line 225, in <lambda>
channel = ChannelPromise(lambda: connection.default_channel)
File "/home/codertjay/.virtualenvs/Gimsap-Ecommerce/lib/python3.9/site-packages/kombu/connection.py", line 895, in default_channel
self._ensure_connection(**conn_opts)
File "/home/codertjay/.virtualenvs/Gimsap-Ecommerce/lib/python3.9/site-packages/kombu/connection.py", line 433, in _ensure_connection
return retry_over_time(
File "/usr/local/lib/python3.9/contextlib.py", line 135, in __exit__
self.gen.throw(type, value, traceback)
File "/home/codertjay/.virtualenvs/Gimsap-Ecommerce/lib/python3.9/site-packages/kombu/connection.py", line 450, in _reraise_as_library_errors
raise ConnectionError(str(exc)) from exc
kombu.exceptions.OperationalError: [Errno 111] Connection refused
This is my celery configuration i am currently using and i am using i have installed redis with pip and also the cli on system but still i have tried changing this configuration but it only works if i access the task by calling it on my own这是我目前正在使用的 celery 配置,我正在使用我已经安装了 redis 和 pip 以及系统上的 cli,但我仍然尝试通过在我自己的配置上调用它来访问任务,但我仍然尝试通过更改此配置来访问它
import os
from celery import Celery
from django.conf import settings
from Gimsap.settings import CELERY_BROKER_URL
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Gimsap.settings')
BROKER_URL = "redis://localhost:6379/1"
# used redis broker if it exists
app = Celery('Gimsap', namespace='CELERY')
app.config_from_object('django.conf:settings')
# Load task modules from all registered Django app configs.
app.autodiscover_tasks(settings.INSTALLED_APPS)
app.conf.broker_url = BROKER_URL
CELERY_BROKER_URL = BROKER_URL
app.conf.beat_schedule = {
"""'
Test celery worker
send_admin_message': {
'task': 'home.tasks.test_task',
'schedule': 3,
},"""
}
@app.task(bind=True)
def debug_task(self):
print(f'Request: {self.request!r}')
I have been on this problem for a hours but finally I made sure my redis server was up which it has always been but i added some configuration to my Celery.py by adding the keyword borker and borker url andd it started working fine我已经在这个问题上待了一个小时,但最后我确定我的 redis 服务器一直正常运行,但我通过添加关键字 borker 和 borker Z572D4E4E4251E5E6B71E181 向我的 Celery.py 添加了一些配置
import os
from celery import Celery
from django.conf import settings
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Gimsap.settings')
# used redis broker if it exists
app = Celery('Gimsap', broker="redis://localhost:6379", backend="redis://localhost:6379")
app.config_from_object('django.conf:settings')
# Load task modules from all registered Django app configs.
app.autodiscover_tasks(settings.INSTALLED_APPS)
BROKER_URL = "redis://localhost:6379"
broker_url = "redis://localhost:6379"
app.conf.broker_url = BROKER_URL
CELERY_BROKER_URL = BROKER_URL
app.conf.beat_schedule = {
"""'
Test celery worker
send_admin_message': {
'task': 'home.tasks.test_task',
'schedule': 3,
},"""
}
@app.task
def debug_task():
print(f'Request: ')
The way i debug it was the @shared_task wasn't using the default configuration Because the @app.task in the celery was working well that when i realized the celery wasn't accessing my redis server我调试它的方式是 @shared_task 没有使用默认配置因为 celery 中的 @app.task 运行良好,当我意识到 celery 没有访问我的 Z86A1B907D54B7010394BFE3766 时
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.