2016-07-24 128 views
0

我有一个XMLRPC服务器,客户端在服务器上运行一些函数并获取返回值。如果函数执行得很快,那么一切都很好,但我有一个从文件读取并返回一些值给用户的函数。阅读需要大约一分钟(有一些复杂的东西),当一个客户端在服务器上运行此功能时,服务器无法响应其他用户,直到该功能完成。在不阻塞主线程的情况下从python线程返回值

我想创建一个新线程来读取这个文件并为用户返回值。以某种方式可能吗?

当一个客户端运行一些长功能时,是否有任何好的解决方案/模式不要阻塞服务器?

+0

您对XMLRPC服务器有什么用?你是自己写的还是使用库? – ErikR

回答

-1

是的,使用threading模块可以产生新的线程。请参阅documentation。一个例子是这样的:

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

该代码使用time.sleep以模拟动作花费一定量的时间。输出应该如下所示:

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-蟒蛇)是你需要的。 – Dartmouth