我在一个应用程序中使用sqlalchemy,其中芹菜任务使用作用域会话与mysql交互。
db.py
engine = create_engine(
'mysql://root:pass@localhost/testdb?charset=utf8&use_unicode=0',
pool_recycle=3600)
db_session = scoped_session(
sessionmaker(autocommit=False, autoflush=False, bind=engine))
我使用定期运行的celery任务(使用芹菜节拍)并创建使用会话的任务的TaskSet
@celery.task
def create_tasks():
tasks = []
tasks.append(charge_now.subtask((tid,)))
job = TaskSet(tasks)
job.apply_async()
以下是TaskSet由
组成的任务@celery.task
def charge_now(tid):
transaction = db_session.query(TransactionInfo).get(tid)
(之后我正在进行插入。为了清楚起见,我省略了代码和代码中的一些逻辑)
以下是我得到的错误
任务tasks.charge_now [bf199346-0862-4709-95b8-053859ed5a6f]提出 exception:ResourceClosedError('此结果对象不返回 行。它已自动关闭。',)
我理解这是由多个线程尝试共享同一会话而创建的问题,但有人可以指出如何解决这个问题吗?