【发布时间】:2014-11-11 10:41:10
【问题描述】:
奇怪的行为,我不知道如何解释。我有一个模型Track,还有一些相关的points。我调用一个 celery 任务来执行一些带有点的计算,它们似乎在方法本身中完全可以访问,但在 celery 任务中不可用。
@shared_task
def my_task(track):
print 'in the task', track.id, track.points.all().count()
def some_method():
t = Track()
t.save()
t = fill_with_points(t) # creating points, attaching them to a Track
t.save()
print 'before the task', track.id, track.points.all().count()
my_task.delay(t)
打印以下内容:
before the task, 21346, 2971
in the task, 21346, 0
奇怪的是,当我在my_task 的第一行或在调用my_task 之前放置一个 time.sleep(10) 时,效果很好,就像有一些竞争条件一样。但是打印的第一行清楚地表明points 在数据库中可用,当它进行选择查询时(track.points.all().count())。
【问题讨论】:
-
调用
some_method的上下文是什么?是从一个视图,还是一个管理命令,还是什么? -
是其他模型的
save方法。
标签: python django celery race-condition