Google Cloud Pub/Sub SDK - подписка () принимает не менее 3 аргументов (2 дано)
Код ниже, чтобы подписаться на тему, работал несколько месяцев назад.
from google.cloud import pubsub
def callback(message):
print(message.data)
message.ack()
project_id = "my_project"
topic_name = "xxx"
subscription_name = "xxx"
subscriber = pubsub.SubscriberClient()
topic = "projects/{}/topics/{}".format(project_id, topic_name)
subscription_name = 'projects/{}/subscriptions/{}'.format(project_id, subscription_name)
subscription = subscriber.subscribe(subscription_name)
future = subscription.open(callback)
try:
future.result()
except Exception as ex:
subscription.close()
raise
Я попытался запустить его сейчас, и я получаю следующее сообщение об ошибке:
Файл "pubsub_sub.py", строка 16, в
subscription = subscriber.subscribe(имя_подписки)
Ошибка типа: подписка () принимает как минимум 3 аргумента (2 дано)
Как указано в документации к Google-Cloud Pub/Sub, похоже, мой код правильный. Кроме того, как я уже сказал, этот код работал в прошлом. Любое предложение?
1 ответ
Как объяснено в документации, вы пропускаете обратный вызов.
Похоже, что README.rst на Github неверен, поскольку в коде мы видим, что эти 3 аргумента необходимы:
def subscribe(
self, subscription, callback, flow_control=(),
scheduler=None):
Я только что предложил исправление для файла для уточнения.
Редактировать:
Что касается того, что раньше это работало, вы можете увидеть в репозитории, как было создано pull 5237 subscribe_experimental, и этот метод требовал обратного вызова, в отличие от обычной подписки. Позже, при получении 5274, subscribe_experimental был повышен до подписки, что означает, что теперь требуется обратный вызов.
Если у вас возникают ошибки при предоставлении обратного вызова, убедитесь, что все ваши библиотеки обновлены.