2016-07-24 5 views
0

Ich habe einen XMLRPC-Server und Client führt einige Funktionen auf Server aus und erhält zurückgegebenen Wert. Wenn die Funktion schnell ausgeführt wird, ist alles in Ordnung, aber ich habe eine Funktion, die aus der Datei liest und einen Wert an den Benutzer zurückgibt. Das Lesen dauert ungefähr eine Minute (es gibt einige komplizierte Dinge) und wenn ein Client diese Funktion auf dem Server ausführt, kann der Server nicht für andere Benutzer antworten, bis die Funktion beendet ist.Wert aus Thread in Python zurückgeben, ohne Hauptthread zu blockieren

Ich möchte einen neuen Thread erstellen, der diese Datei liest und den Wert für den Benutzer zurückgibt. Ist es irgendwie möglich?

Gibt es irgendwelche guten Lösungen/Muster, um den Server nicht zu blockieren, wenn ein Client eine lange Funktion ausführt?

+0

Was verwenden Sie für Ihren XMLRPC-Server? Haben Sie es selbst geschrieben oder benutzen Sie eine Bibliothek? – ErikR

Antwort

-1

Ja, mit dem Modul threading können Sie neue Threads erstellen. Siehe die documentation. Ein Beispiel wäre dies:

import threading 
import time 

def main(): 
    print("main: 1") 
    thread = threading.Thread(target=threaded_function) 
    thread.start() 
    time.sleep(1) 
    print("main: 3") 
    time.sleep(6) 
    print("main: 5") 

def threaded_function(): 
    print("thread: 2") 
    time.sleep(4) 
    print("thread: 4") 

main() 

Dieser Code verwendet time.sleep zu simulieren, dass eine Aktion eine gewisse Zeit in Anspruch nimmt. Die Ausgabe sollte wie folgt aussehen:

main: 1 
thread: 2 
main: 3 
thread: 4 
main: 5 
+0

aber ich möchte einen Wert zurückgeben, nicht drucken – Mateusz

+0

Dann [this] (https://stackoverflow.com/questions/6893968/how-to-get-the-return-value-from-a-thread-in- Python) ist, was Sie brauchen. – Dartmouth

Verwandte Themen