我想知道,是否可以在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秒的等待时间。
预期:首先将响应返回给客户,然后在后台运行此部分?
有人可以提供一些解决方案吗?谢谢。
答案 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()