我有一个XMLRPC服务器,客户端在服务器上运行一些函数并获得返回值。如果函数快速执行,那么一切都很好,但我有一个从文件读取并向用户返回一些值的函数。阅读大约需要一分钟(有一些复杂的东西),当一个客户端在服务器上运行此功能时,服务器在功能完成之前无法响应其他用户。
我想创建一个新线程,它将读取此文件并为用户返回值。有可能吗?
当一个客户端运行一些长函数时,是否有任何好的解决方案/模式不阻塞服务器?
答案 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