从python中的线程返回值而不阻塞主线程

时间:2016-07-24 10:58:56

标签: python multithreading server xml-rpc

我有一个XMLRPC服务器,客户端在服务器上运行一些函数并获得返回值。如果函数快速执行,那么一切都很好,但我有一个从文件读取并向用户返回一些值的函数。阅读大约需要一分钟(有一些复杂的东西),当一个客户端在服务器上运行此功能时,服务器在功能完成之前无法响应其他用户。

我想创建一个新线程,它将读取此文件并为用户返回值。有可能吗?

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

2 个答案:

答案 0 :(得分:0)

是的,这是可能的,这样

#starting the thread
def start_thread(self):
     threading.Thread(target=self.new_thread,args=()).start()

# the thread you are running your logic
def new_thread(self, *args):
    #call the function you want to retrieve data from
    value_returned = partial(self.retrieved_data_func,arg0)

#the function that returns
def retrieved_data_func(self):
    arg0=0
    return arg0

答案 1 :(得分:-2)

是的,使用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