账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    如何在Celery任务中“优雅”地管理数据库session?
    48
    0

    我有一些操作数据库的celery任务,需要在代码开头新建session,在代码结尾关闭session。

    当前的方式是:

    @app.task
    def celery_task():
        session = DB_Session()
        try:
            foo
        except:
            bar
        finally:
            session.close()

    但问题是,这样对错误处理很不友好。而且一整个任务里都用try...except...finally感觉很难看。


    最近看Celery的官方文档,想到可以新建一个自定义的MyTask,并在Task.after_return()中关闭session,然后所有celery任务定义的时候都base=MyTask。如下:

    class MyTask(celery.task):
        def after_return(self, *foo):
            self.session.close()
    
    @app.task(bind=True, base=MyTask)
    def celery_task(self):
        foo

    我的问题是,如何才能在一个task创建的时候执行新建session的操作?我在celery的文档中没有找到一个方法是在task创建的时候执行的。

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    更多回答
    网站公告
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部