我在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"从实例开始。"