2016-04-19 2 views
0

У меня есть этот вопрос, который частично связан с firebase. В настоящее время я использую смешанную библиотеку firebase python, которая поддерживает поток. В настоящее время у меня есть поток на /unread_messages/, поэтому каждый раз, когда непрозрачное сообщение помещается в firebase, unread_message_handler() что-то сделает.Python Firebase непрочитанный поток сообщений

stream = FIREBASE.child('/unread_messages/').stream(unread_message_handler) 

И обработчик

def unread_message_handler(stream): 

    for data in stream: 
     if data['path'] == '/': 
      # Multi-message node 
      messages = data['data'] or [] 
      for message_id in messages: 
       if messages[message_id] is not None: 
        send_notification(message_id, messages[message_id]) 
     else: 
      # Single-message node 
      if data['data'] is not None: 
       send_notification(data['path'], data['data']) 

Проблема: Я не хочу, чтобы отправить уведомление непосредственно, когда непрочитанное сообщение помещается. Я хотел бы подождать 10 секунд, посмотрю, все ли это сообщение в /unread_messages/, и если да, отправьте уведомление.

Отправка его прямое, это уже сделано, но я не уверен, как ждать 10 секунд, потому что поток только вызывает обработчик при новом действии, в то время как я постоянно хочу проверить отметку времени

EDIT Я использую this библиотеку для потокового

+0

Можете ли вы ссылаться на документы, какие библиотеки вы используете? –

+1

@JohnZwinck Конечно, я помещаю его в edit – dnsko

ответ

0

Что о вводе значения timestamp для данных сообщения. Затем, когда сообщение добавлено, вы можете прочитать его с его timestamp и установить 10 seconds delayed call с помощью timestamp другой функции, которая будет проверять базу данных Firebase, если сообщение по-прежнему непрочитано.

+0

Данные сообщения уже имеют атрибут date. Я тоже думал о задержанном звонке, но не знал, как это сделать. Поток в основном обрабатывает сообщения, которые поступают прямо сейчас (сообщение в основном представляет собой непрочитанное сообщение). Так что, если я не буду обрабатывать сообщение сразу, потому что я должен ждать 10 секунд, как это будет? Лучше ли начать другой процесс для непрерывного сканирования всех 'unread_messages'? – dnsko

0

библиотека используется нерестится нить Python, когда вы звоните stream(), здесь: https://github.com/thisbejim/Pyrebase/blob/master/pyrebase/pyrebase.py#L288

Этот поток затем вызывает ваш обратный вызов. Из вашего вопроса неясно, что делает ваш основной поток после того, как он называет stream(), но в основном вы можете установить таймер, чтобы разбудить основной поток через 10 секунд после того, как каждое сообщение получено в потоке потока или просто опрос в вашем потоке основной поток каждые 10 секунд.

Смежные вопросы