Ошибка использования сельдерея для планирования фонового подписчика rabbitMQ во Flask - PullRequest
0 голосов
/ 01 ноября 2018

Я использую 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?

...