如何在 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()
我想知道,在 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()