Python 芹菜工人不使用Django将所有事务写入数据库

Python 芹菜工人不使用Django将所有事务写入数据库,python,django,celery,django-celery,Python,Django,Celery,Django Celery,我在用Django配芹菜。我的芹菜工人使用Django及其模型来执行数据库事务。我的worker中有几个任务,每个任务都多次对数据库进行读/写调用。我运行6个worker,每个worker有10个线程并发 我所面临的问题是,它正确地执行数据库中的所有读取事务,但却错过了对数据库执行一些写入事务。而它遗漏的写入事务是一致的。它总是无法在同一点写入数据库,尽管它从未引发任何异常 我尝试在事务之间放置时间。sleep(5),给它时间,但没有帮助。我开始认为这是某种连接池问题 其他人对此有什么想法或经历

我在用Django配芹菜。我的芹菜工人使用Django及其模型来执行数据库事务。我的worker中有几个任务,每个任务都多次对数据库进行读/写调用。我运行6个worker,每个worker有10个线程并发

我所面临的问题是,它正确地执行数据库中的所有
读取
事务,但却错过了对数据库执行一些
写入
事务。而它遗漏的
写入
事务是一致的。它总是无法在同一点写入数据库,尽管它从未引发任何异常

我尝试在事务之间放置
时间。sleep(5)
,给它时间,但没有帮助。我开始认为这是某种连接池问题


其他人对此有什么想法或经历过相同的问题吗?

使用
transaction.atomic
?如果在修改数据库中的任何内容之前必须确保记录存在于数据库中,transaction.atomic将非常有用。该记录已存在,问题在于其修改的一个字段(而不是另一个@Baldr芹菜任务)在对其进行更改时未提交事务。在任务结束时,下一个任务将在同一事务中启动(如果在同一工作进程中)。您必须明确提交更改。Django的连接可能会自动提交,但默认情况下,它可能不够频繁。请尝试
transaction.atomic
,这确实会有帮助。@baldr即使我每次想在整个任务中进行更改时都使用model.save()方法?
model.save()
不会提交事务。在Django视图中,当响应写回通道时,会自动(使用Django)进行提交。在芹菜中,没有人关心这件事,你应该自己去做。