Отправьте pu sh уведомление многим пользователям через python - PullRequest
0 голосов
/ 19 марта 2020

Для моего проекта, использующего обмен сообщениями Firebase, чтобы отправить уведомление pu sh. У меня есть пользовательские маркеры Firebase, хранящиеся в базе данных. Используя их, я отправляю pu sh каждому пользователю. Общее время отправки составляет около 100 секунд на 100 пользователей. Есть ли способ отправить pu sh асинхронно (я имею в виду, чтобы отправить много уведомлений pu sh за один раз)

# Code works synchronously
for user in users:
    message = messaging.Message(                
            notification=messaging.Notification(
              title="Push title",
              body="Push body"
              ),
              token = user['fcmToken']
          )

    response = messaging.send(message)

Ответы [ 2 ]

2 голосов
/ 19 марта 2020

Конечно, вы можете использовать одну из python библиотек параллелизма. Вот один из вариантов:

from concurrent.futures import ThreadPoolExecutor, wait, ALL_COMPLETED

def send_message(user):
    message = messaging.Message(                
        notification=messaging.Notification(
            title="Push title",
            body="Push body"),
        token = user['fcmToken'])

    return messaging.send(message)

with ThreadPoolExecutor(max_workers=10) as executor:  # may want to try more workers
    future_list = []
    for u in users:
        future_list.append(executor.submit(send_message, u))

    wait(future_list, return_when=ALL_COMPLETED)

    # note: we must use the returned self to get the test count
    print([future.result() for future in future_list])
1 голос
/ 19 марта 2020

Если вы хотите отправить одно и то же сообщение всем токенам, вы можете использовать один вызов API с многоадресным сообщением . В репозитории Github есть пример отправки многоадресного сообщения в Python:

def send_multicast():
    # [START send_multicast]
    # Create a list containing up to 500 registration tokens.
    # These registration tokens come from the client FCM SDKs.
    registration_tokens = [
        'YOUR_REGISTRATION_TOKEN_1',
        # ...
        'YOUR_REGISTRATION_TOKEN_N',
    ]

    message = messaging.MulticastMessage(
        data={'score': '850', 'time': '2:45'},
        tokens=registration_tokens,
    )
    response = messaging.send_multicast(message)
    # See the BatchResponse reference documentation
    # for the contents of response.
    print('{0} messages were sent successfully'.format(response.success_count))
    # [END send_multicast]
...