Google pubsub Asyn c блокируется навсегда при вызове из оболочки Django manage.py - PullRequest
0 голосов
/ 08 апреля 2020

Контекст: извлечение сообщений из подписки Google pubsub из сценария django manage.py и сохранение отфильтрованных сообщений в бэкэнде.

фрагмент кода, который выполняется под def handle(self, *args, **options), выглядит следующим образом ( https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/pubsub/cloud-client/quickstart/sub.py):

    from google.cloud import pubsub_v1

    subscriber_client = pubsub_v1.SubscriberClient()
    subscription_path = subscriber_client.subscription_path(
        project_id, subscription_name
    )

    def callback(message):
        print(
            "Received message {} of message ID {}\n".format(
                message, message.message_id
            )
        )
        # Acknowledge the message. Unack'ed messages will be redelivered.
        message.ack()
        print("Acknowledged message {}\n".format(message.message_id))

    streaming_pull_future = subscriber_client.subscribe(
        subscription_path, callback=callback
    )
    print("Listening for messages on {}..\n".format(subscription_path))

    try:
        streaming_pull_future.result()
    except:  # noqa
        streaming_pull_future.cancel()

    subscriber_client.close()

Тот же код работает, как и ожидалось, когда запускается вне команды manage.py с использованием python3 script.py, но блокируется / ожидает на subscriber_client.subscribe без вывода если вызывается внутри Django команды управления без каких-либо исключений.

Возможно, проблема связана с concurrent.futures. Заранее спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...