Я попытался запустить очень простую задачу со связанной задачей, упомянутой в tutorialсельдерей: связана задача кидает ошибку соединения
add.apply_async((2, 2), link=add.s(16))
и получил исключение в рабочем процессе:
[2014-09-21 19:56:38,531: WARNING/Worker-1] C:\Python33\lib\site-packages\celery-3.1.15-
py3.3.egg\celery\app\trace.py:364: RuntimeWarning: Exception raised outside body: OSError(ConnectionRefusedError(10061, 'No connection could be made because the target machine actively refused it', None, 10061),):
Traceback (most recent call last):
File "C:\Python33\lib\site-packages\kombu-3.0.23-py3.3.egg\kombu\utils\__init__.py", line 420, 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 "C:\Python33\lib\site-packages\kombu-3.0.23-py3.3.egg\kombu\connection.py", line 436, in _ensured
return fun(*args, **kwargs)
File "C:\Python33\lib\site-packages\kombu-3.0.23-py3.3.egg\kombu\messaging.py", line 173, in _publish
channel = self.channel
File "C:\Python33\lib\site-packages\kombu-3.0.23-py3.3.egg\kombu\messaging.py", line 190, in _get_channel
channel = self._channel = channel()
File "C:\Python33\lib\site-packages\kombu-3.0.23-py3.3.egg\kombu\utils\__init__.py", line 422, in __call__
value = self.__value__ = self.__contract__()
File "C:\Python33\lib\site-packages\kombu-3.0.23-py3.3.egg\kombu\messaging.py", line 205, in <lambda>
channel = ChannelPromise(lambda: connection.default_channel)
File "C:\Python33\lib\site-packages\kombu-3.0.23-py3.3.egg\kombu\connection.py", line 756, in default_channel
self.connection
File "C:\Python33\lib\site-packages\kombu-3.0.23-py3.3.egg\kombu\connection.py", line 741, in connection
self._connection = self._establish_connection()
File "C:\Python33\lib\site-packages\kombu-3.0.23-py3.3.egg\kombu\connection.py", line 696, in _establish_connection
conn = self.transport.establish_connection()
File "C:\Python33\lib\site-packages\kombu-3.0.23-py3.3.egg\kombu\transport\pyamqp.py", line 112, in establish_connection
conn = self.Connection(**opts)
File "C:\Python33\lib\site-packages\amqp-1.4.6-py3.3.egg\amqp\connection.py", line 165, in __init__
self.transport = self.Transport(host, connect_timeout, ssl)
File "C:\Python33\lib\site-packages\amqp-1.4.6-py3.3.egg\amqp\connection.py", line 186, in Transport
return create_transport(host, connect_timeout, ssl)
File "C:\Python33\lib\site-packages\amqp-1.4.6-py3.3.egg\amqp\transport.py", line 299, in create_transport
return TCPTransport(host, connect_timeout)
File "C:\Python33\lib\site-packages\amqp-1.4.6-py3.3.egg\amqp\transport.py", line 95, in __init__
raise socket.error(last_err)
OSError: [WinError 10061] No connection could be made because the target machine actively refused it
I сделал небольшую отладку в transport.py и обнаружил, что рабочий пытался подключиться к порту 5672 на localhost. Похоже, что рабочий считает, что связанная задача должна выполняться через локальный экземпляр RabbitMQ. Это странно, потому что я указал удаленного брокера RabbitMQ в настройках конфигурации. Кроме того, установка работает, если я просто запустить вызов асинхронной без связанной задачи:
add.apply_async((2, 2))
Вот мои настройки:
- Использование RabbitMQ в качестве брокера и Redis, как результат обратно конец на удаленном Windows Server
- Запустите мой тестовый клиент на другом компьютере с Windows 7
Может ли кто-нибудь пролить свет? Благодарю.
Я выяснил обходное решение, чтобы указать URL-адрес брокера, явно используя celery [параметр команды] (https://celery.readthedocs.org/en/latest/reference/celery.bin.base.html). Мне кажется, что связанная задача не импортирует настройку должным образом. – Tuzki
Он также решил для меня, знаете ли вы, почему нужно явно указывать? Я использовал redis в качестве брокера. – ratbaby