Вот простой тестовый код, в котором слушатель прикрепляется к документу в 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