Отключение слушателя firestore в python приводит к зависанию программы - PullRequest
1 голос
/ 03 октября 2019

Вот простой тестовый код, в котором слушатель прикрепляется к документу в firestore, а после этого отключается.

import firebase_admin
from firebase_admin import credentials
from firebase_admin import firestore

cred = credentials.Certificate('Path to your credential file')
firebase_admin.initialize_app(cred)

def on_snapshot(doc_snapshot, changes, read_time):
    for doc in doc_snapshot:
        print(u'Received document snapshot: {}'.format(doc.id))

db = firestore.client()

doc_ref = db.collection('cities').document('SF')

doc_watch = doc_ref.on_snapshot(on_snapshot)  # attaching listener

print('unsubscribing')
doc_watch.unsubscribe() # detaching listener
print('unsubscribed')

Прослушиватель работает хорошо, но когда дело доходит до отсоединения, программа просто зависает при вызове unsubscribe (),Это не дает никакой ошибки или исключения, и через некоторое время ситуация такая же. Только выполнение прерывания клавиатуры останавливает программу, и я получаю каждый раз один и тот же след:

Traceback (most recent call last):
  File "firestore_test.py", line 21, in <module>
    doc_watch.unsubscribe()
  File "/home/andriy/.local/lib/python3.6/site-packages/google/cloud/firestore_v1/watch.py", line 313, in unsubscribe
    self.close()                                                                                                                                                                                                                            
  File "/home/andriy/.local/lib/python3.6/site-packages/google/cloud/firestore_v1/watch.py", line 278, in close                                                                                                                             
    self._consumer.stop()                                                                                                                                                                                                                   
  File "/home/andriy/.local/lib/python3.6/site-packages/google/api_core/bidi.py", line 701, in stop                                                                                                                                         
    self._thread.join()                                                                                                                                                                                                                     
  File "/usr/lib/python3.6/threading.py", line 1056, in join                                                                                                                                                                                
    self._wait_for_tstate_lock()                                                                                                                                                                                                            
  File "/usr/lib/python3.6/threading.py", line 1072, in _wait_for_tstate_lock                                                                                                                                                               
    elif lock.acquire(block, timeout):                                                                                                                                                                                                      
KeyboardInterrupt                     
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...