Контекст: извлечение сообщений из подписки 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. Заранее спасибо