如何在 web.py 响应 return 后 运行 后台功能

how to run background function after response return from web.py

我想知道,在 web.py 服务响应后是否可以 运行 一个功能,哪个功能需要很长时间才能 运行?

下面举个例子。

文件名:code.py

import web

import time 

urls = (
    '/', 'index'
)

app = web.application(urls, globals())

class index:

    def GET(self):

        try:
           with open('filename.txt', 'a') as file:
                for i in range(100):
                    time.sleep(1)
                    file.write("No of times: {}".format(i))
           return "some json response"
        except:
            return "Exception occurred"

if __name__ == "__main__":     
     app.run()

当我运行上面的代码时,显然这需要时间,因为我们使用时间模块休眠一秒然后写入文件。所以,我应该等待 100 秒才能得到服务的响应。

我想跳过这 100 秒的等待时间。

预期: 首先 return 响应客户端然后 运行 这部分在后台?

谁能提供一些解决方案。谢谢..

看看python documentation for Thread.run()

注意: 使用后台任务,您将无法像现在这样 return "Exception occurred"。我相信你能接受。

这是一个简单的小解决方案。还有其他方法,但我觉得你应该自己探索更多,因为你是 python 初学者。 :)

import web
import time 

urls = (
    '/', 'index'
)

app = web.application(urls, globals())

class index:

    def writeToFile():
     try:
       with open('filename.txt', 'a') as file:
            for i in range(100):
                time.sleep(1)
                file.write("No of times: {}".format(i))
       # Log completion
    except:
        # Log error

    def GET(self):
        thread = Thread(target=writeToFile)
        thread.start()

        return {<myJSON>}

if __name__ == "__main__":     
     app.run()