带有mysql,sqlalchemy和celery的ResourceClosedError

时间:2013-10-10 15:55:05

标签: python mysql sqlalchemy celery mysql-python

我在一个应用程序中使用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('此结果对象不返回   行。它已自动关闭。',)

我理解这是由多个线程尝试共享同一会话而创建的问题,但有人可以指出如何解决这个问题吗?

0 个答案:

没有答案