SQLAlchemy会话分为两个独立的Celery任务

时间:2014-04-29 11:50:29

标签: python sqlalchemy celery

我在Celery任务中遇到SQLAlchemy问题。我有一个任务创建一些对象,将它们提交到数据库,然后它添加另一个任务与这些新数据库行的ID,然后另一个任务提取并处理这些。但是,即使它们在数据库中,其他任务也无法获取行。

要草绘它:

@task(name="create-task")
def create_task():
    obj = SomeClass(column1="Something", column2="Else")
    session.add(obj)
    session.commit()

    consume_task.delay(obj.id)

@task(name="consume-task")
def consume_task(obj_id):
    obj = session.query(SomeClass).get(obj_id)
    # obj is None

这两个任务在两个独立的芹菜进程中运行,这些进程在worker_process_init.connect信号中初始化它们自己的连接和会话,但是consume_task上的会话显然无法从数据库中获取行。

如果我在create_task之后启动consume_task celery进程,那么它适用于在启动之前插入的那些行。但我需要它们同时运行。

我是否遗漏了一些关于会话行为的完全明显的内容?我认为SQLAlchemy会话查询总是会查询实际的数据库而不是某些" snapshot"从实例开始。"

0 个答案:

没有答案