2017-03-05 2 views
2

Ich benutze Python, um Daten von Mongo-Datenbank zu erhalten, um es zu analysieren. Also ändere ich Daten mit Meteor App und Client Python, um es in Echtzeit zu erhalten. Dies ist mein Code:Siehe Echtzeitänderungen in Daten mit Python Meteor

from MeteorClient import MeteorClient 
def call_back_meth(): 
    print("subscribed") 
client = MeteorClient('ws://localhost:3000/websocket') 
client.connect() 
client.subscribe('tasks', [], call_back_meth) 
a=client.find('tasks') 
print(a) 

, wenn ich dieses Skript ausführen, ist es mir nur in ‚a‘ aktuelle Daten zeigen, und die Konsole wird geschlossen,

ich die Konsole offen bleiben und die Druckdaten im Fall lassen will der Veränderung. Ich habe True verwendet, um das Skript laufen zu lassen und Änderungen zu sehen, aber ich denke, es ist keine gute Lösung. Gibt es noch eine andere optimierte Lösung?

+0

Ich habe noch nie MeteorClient in Python verwendet, aber in Meteor gibt es eine [Beobachter Funktion] (http: // docs. meteor.com/api/collections.html#Mongo-Cursorobserve) können Sie einen Cursor aufrufen, und es wird jedes Mal ein Rückruf ausgeführt, wenn Daten aus der Sammlung hinzugefügt/aktualisiert/gelöscht werden. Sehen Sie, ob Sie die entsprechende Funktion in MeteorClient finden können. – jordanwillis

+0

ja ich habe es ausprobiert und es hat funktioniert danke –

Antwort

0

Um Echtzeit-Feedback zu erhalten, müssen Sie Änderungen abonnieren und diese Änderungen dann überwachen. Hier ist ein Beispiel beobachten tasks:

from MeteorClient import MeteorClient 

def call_back_added(collection, id, fields): 
    print('* ADDED {} {}'.format(collection, id)) 
    for key, value in fields.items(): 
     print(' - FIELD {} {}'.format(key, value)) 

    # query the data each time something has been added to 
    # a collection to see the data `grow` 
    all_lists = client.find('lists', selector={}) 
    print('Lists: {}'.format(all_lists)) 
    print('Num lists: {}'.format(len(all_lists))) 

client = MeteorClient('ws://localhost:3000/websocket') 
client.on('added', call_back_added) 
client.connect() 
client.subscribe('tasks') 

# (sort of) hacky way to keep the client alive 
# ctrl + c to kill the script 
while True: 
    try: 
     time.sleep(1) 
    except KeyboardInterrupt: 
     break 

client.unsubscribe('tasks') 

(Reference) (Docs)

+0

Danke Mann, du hast meinen Tag gemacht :) –