Я должен подписаться на обновление в реальном времени из Firestore, а затем отправить их через веб-сокет в Торнадо
Я пытался использовать IOLoop.run_in_executor, IOLoop.run_on_executor, @ gen.coroutine, async, ожидают, но они не работают,Единственный успешный способ - назначить изменение какой-либо переменной, а затем использовать PeriodicCallback для отправки их через websocket, но это не в режиме реального времени.
class SocketHandler(WebSocketHandler):
def open(self, sport, event):
f = firestore.Client()
query_ref = f.collection('some_col').document('some_doc')
# Can not await here
query_watch = query_ref.on_snapshot(self.callback)
def callback(self, doc_snapshot, changes, read_time):
for change in changes:
if change.type.name == 'ADDED':
# Not possible to write_message because the event loop is done
self.write_message('ADDED')
Я должен нажать на изменение, как только получуобновление из Firestore до веб-сокета.
Edit
on_snapshot само по себе является открытым потоком, но цикл событий продолжается.
после изменения, поступающего из Firestore, слишком поздно, цикл событий завершен.
Как мне написать write_message, пока не запущен цикл событий?