Я использую Celery для создания фоновых подписчиков в своем приложении Flask. Каналы, которые я создаю, действительно работают, когда я держу их вне декоратора @ celery.task. Однако, когда я планирую их как задачу сельдерея, в консоли сельдерея появляется ошибка.
Ниже моя инициация канала:
connection = pika.BlockingConnection(pika.ConnectionParameters(
host=cfg.RABBIT_HOST
))
channel = connection.channel()
channel.exchange_declare(exchange='daemon', exchange_type = 'fanout')
result = channel.queue_declare(exclusive=True)
queue_name = result.method.queue
channel.queue_bind(exchange='daemon',
queue=queue_name)
Вот как я планирую это как задачу сельдерея:
@celery.task()
def start_channel():
print("hello world!")
channel.start_consuming()
start_channel.delay()
if __name__ == "__main__":
app.run(threaded = True)
Когда я запускаю этот код, приложение запускается, но я получаю сообщение об ошибке в консоли сельдерея:
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pika/adapters/select_connection.py", line 982, in poll
self._get_max_wait())
OSError: [Errno 9] Bad file descriptor
Я не могу понять эту ошибку. Может ли кто-нибудь помочь или предложить альтернативу для запуска нескольких подписчиков rabbitmq во Flask?