函数计算,想问下我在云函数用fastapi的BackgroundTasks执行异步任务,这个路由能成功响应请求,但是异步任务不会执行,在服务器部署是正常的执行异步任务
根据你的描述,很有可能是函数计算的限制造成了fastapi BackgroundTasks无法执行的问题。
主要的限制如下:
函数计算执行环境独立
每次调用函数计算服务时,都会为这个调用分配独立的执行环境。执行完成后清理环境。
无法运行后台任务
由于执行环境独立的限制,函数计算服务无法在执行完成后继续运行后台任务。
无法保留状态
执行环境每次都新建,无法将状态保存下来。
fastapi 的 BackgroundTasks 即是需要在函数执行完成后继续运行的后台任务。
但由于函数计算的限制,无法实现。
而在实际服务器上部署时,后台任务可以继续运行,因此能正常执行。
可行的解决方案主要有两个:
在后台任务执行完毕前,阻塞函数计算的执行环境
比如使用 time.sleep() 使函数计算保持执行,从而获得继续运行的时间。
将后台任务代码转移到另一个持续运行的环境中
比如云服务、定时任务等。函数计算响应请求后,通知其他环境执行后台任务。
两种方法的原理都是:将后台任务从函数计算中分离出去,交给能长期运行的外部环境执行。
希望可以解答你的疑问。函数计算的限制的确会影响一些后台任务无法正常工作。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。