开发者社区 > 云原生 > Serverless > 正文

函数计算,想问下我在云函数用fastapi的BackgroundTasks执行异步任务,这个路由能成

函数计算,想问下我在云函数用fastapi的BackgroundTasks执行异步任务,这个路由能成功响应请求,但是异步任务不会执行,在服务器部署是正常的执行异步任务

提问26.png

展开
收起
函数计算小白 2023-08-02 19:01:24 213 0
1 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    根据你的描述,很有可能是函数计算的限制造成了fastapi BackgroundTasks无法执行的问题。

    主要的限制如下:

    函数计算执行环境独立
    每次调用函数计算服务时,都会为这个调用分配独立的执行环境。执行完成后清理环境。

    无法运行后台任务
    由于执行环境独立的限制,函数计算服务无法在执行完成后继续运行后台任务。

    无法保留状态
    执行环境每次都新建,无法将状态保存下来。

    fastapi 的 BackgroundTasks 即是需要在函数执行完成后继续运行的后台任务。

    但由于函数计算的限制,无法实现。

    而在实际服务器上部署时,后台任务可以继续运行,因此能正常执行。

    可行的解决方案主要有两个:

    在后台任务执行完毕前,阻塞函数计算的执行环境
    比如使用 time.sleep() 使函数计算保持执行,从而获得继续运行的时间。

    将后台任务代码转移到另一个持续运行的环境中
    比如云服务、定时任务等。函数计算响应请求后,通知其他环境执行后台任务。

    两种方法的原理都是:将后台任务从函数计算中分离出去,交给能长期运行的外部环境执行。

    希望可以解答你的疑问。函数计算的限制的确会影响一些后台任务无法正常工作。

    2023-08-02 20:18:44
    赞同 展开评论 打赏

快速交付实现商业价值。

相关产品

  • 函数计算
  • 相关电子书

    更多
    Hologres Serverless之路:揭秘弹性计算组 立即下载
    Serverless开发平台: 让研发效能再提升 立即下载
    Serverless 引领云上研发新范式 立即下载