我正在使用 Cerely (版本3.0.25)来管理我的django(版本1.5.4)项目上的延迟任务。
我在保存查询后尝试通过芹菜检索更新的数据库时出现问题。
以下是示例代码。 ( views.py 的)
# import model
from .models import SampleModel
# import celery task
from utils.tasks import GetLastID
# Sample function in view
def save_query():
# Sample saving query. Let's assume that query.id returns value "7"
query = SampleModel(field_A="A", field_B="B")
query.save()
# Case 1 : this return "6" which is a past 'Last ID value' (not expected)
GetLastID.apply_async(args=[], countdown=0)
# Case 2 : this return "7" which is most recent ID value as expected
GetLastID.apply_async(args=[], countdown=1)
简而言之,当我将任务延迟一秒时,我得到了预期的价值。但是,当我毫不拖延地执行芹菜任务时,我得到了没有更新的值。
我认为问题是“芹菜执行速度太快,无法检索更新的数据库”。
我怎样才能毫不拖延地获得预期值?以下是我认为的伪代码。
(query.save() | GetLastID()).delay()
提前致谢。
答案 0 :(得分:2)
一种方法是在调用celery任务之前显式提交更改。
使用django.db.transaction.commit_manually
from django.db import transaction
@transaction.commit_manually # <----
def view(request, ...):
query = SampleModel(field_A="A", field_B="B")
query.save()
transaction.commit() # <----
GetLastID.apply_async(args=[])