从web.py返回响应后如何运行后台功能

时间:2019-05-13 06:34:18

标签: python 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秒的等待时间。

预期:首先将响应返回给客户,然后在后台运行此部分?

有人可以提供一些解决方案吗?谢谢。

1 个答案:

答案 0 :(得分:0)

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