【问题标题】:Returning value from thread in python without blocking main thread从python中的线程返回值而不阻塞主线程
【发布时间】:2016-11-27 19:47:08
【问题描述】:

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

我想创建一个新线程来读取这个文件并为用户返回值。有没有可能?

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

【问题讨论】:

  • 您的 XMLRPC 服务器使用什么?你是自己写的还是在使用库?

标签: python multithreading server xml-rpc


【解决方案1】:

是的,这样是可能的

#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

【讨论】:

    【解决方案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
    

    【讨论】:

    • 但我想返回一个值,而不是打印
    • 那么this就是你所需要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-25
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    • 1970-01-01
    • 2016-09-25
    • 1970-01-01
    相关资源
    最近更新 更多