2016-07-24 3 views
0

私はXMLRPCサーバーを持っていて、クライアントはサーバー上でいくつかの関数を実行し、戻り値を取得します。関数が迅速に実行される場合はすべて正常ですが、私はファイルから読み込み、ユーザーにいくつかの値を返す関数を持っています。読み取りには約1分(複雑なものがあります)があり、あるクライアントがこの機能をサーバー上で実行すると、サーバーはその機能が完了するまで他のユーザーに対して応答することができません。メインスレッドをブロックせずにPythonのスレッドから値を返す

私は、このファイルを読み込んで値を返す新しいスレッドを作成したいと思います。どういうわけか可能ですか?

1つのクライアントが長い機能を実行しているときにサーバーをブロックしないようにするには、優れたソリューションやパターンがありますか?

+0

XMLRPCサーバーには何を使用していますか?自分で書いたり、図書館を使っていますか? – ErikR

答えて

-1

はい、threadingモジュールを使用すると、新しいスレッドを生成できます。 documentationを参照してください。このコードはアクションはある程度の時間を要することをシミュレートするためtime.sleepを使用しています

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() 

:例は、これになります。出力は次のようになります。

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

しかし、私は値を返したいと思います。印刷しません。 – Mateusz

+0

[this](https://stackoverflow.com/questions/6893968/how-to-get-the-return-value-from-a-thread-in- Python)が必要です。 – Dartmouth

関連する問題