我想创建一个任务来更新排名。 settings.py djcelery.setup_loader() BROKER_URL = "amqp://guest:guest@localhost:5672//" CELERY_TIMEZONE = 'UTC' 我用 django worker python manage.py celery worker --loglevel=info 任务: @celery.task def update_ranking(duck_pk, new_position): duck = Duck.objects.get(pk=duck_pk) print 'duck.rank_number="%s"' % scope.rank_number
尚未进入排名
if duck.rank_number is None: pass else:
相比于之前的排名呈上升趋势
if duck.rank_number > new_position: duck.rank_trend = True
相比于之前的排名呈下降趋势
elif duck.rank_number < new_position: duck.rank_trend = False
未发生变化,保持之前的
else:
pass
print 'Title: %s, Old pos: %s, New pos: %s, Trend: %s'
% (duck.title, duck.rank_number, new_position, duck.rank_trend)
duck.rank_number = new_position
duck.save()
视图部分:
tasks = []
for new_position, duck in enumerate(Duck.objects.all().order_by('-like_number', 'pk')):
tasks.append(update_ranking.s(duck.pk, new_position + 1))
group = celery.group(tasks)
group.apply_async()
字段 rank_number 正确地更新了,但 rank_trend 没有!? 这可能是在某个地方的一个极小且显而易见的错误。但我已经坐了 5 个小时了,仍然一无所获。当我在没有 celery 的情况下在视图上运行该代码时,该代码可以正常工作。请帮忙。
19:30 编辑
(任务输出)
[2013-07-27 20:49:20,019: 警告/PoolWorker-1] scope.rank_number="1"
[2013-07-27 20:49:20,020: 警告/PoolWorker-1] 标题: 标题 16,旧:1,新 1,趋势:真
[2013-07-27 20:49:20,020: 信息/MainProcess] 从代理 دریافت任务: scope.tasks.update_ranking[dc247c1b-f6a9-4644-9834-6fc815c449af]
[2013-07-27 20:49:20,028: 警告/PoolWorker-4] scope.rank_number="2"
[2013-07-27 20:49:20,028: 警告/PoolWorker-4] 标题: 标题 19,旧:2,新 3,趋势:假
[2013-07-27 20:49:20,030: 警告/PoolWorker-2] scope.rank_number="3"
[2013-07-27 20:49:20,030: 警告/PoolWorker-2] 标题: 在旅行前改善身体状况,旧:3,新 2,趋势:真
[2013-07-27 20:49:20,126: 信息/MainProcess] 任务 celery.group[1be41b1c-eb67-4ba9-80d6-c236aadb3074] 在 0.122579097748s 中成功:<GroupResult:...
[2013-07-27 20:49:20,137: 警告/PoolWorker-3] scope.rank_number="4"
[2013-07-27 20:49:20,137: 警告/PoolWorker-3] 标题: 标题 15,旧:4,新 4,趋势:假
[2013-07-27 20:49:20,160: 信息/MainProcess] 从代理 دریافت任务: scope.tasks.update_ranking[85b25c90-465f-4b2a-bc14-a6f7baf52a2f]
[2013-07-27 20:49:20,189: 信息/MainProcess] 任务 scope.tasks.update_ranking[32fe744a-58df-4499-9cab-c382f42806ae] 在 0.180363893509s 中成功:无
[2013-07-27 20:49:20,199: 警告/PoolWorker-1] scope.rank_number="5"
[2013-07-27 20:49:20,199: 警告/PoolWorker-1] 标题: 买车,旧:5,新 5,趋势:真
[2013-07-27 20:49:20,256: 信息/MainProcess] 任务 scope.tasks.update_ranking[bd836619-35e6-41b4-8ac8-96ed13383f5b] 在 0.241793870926s 中成功:无
[2013-07-27 20:49:20,257: 信息/MainProcess] 任务 scope.tasks.update_ranking[7c302bc6-5ec8-40a1-b8e7-e71e96de0dd9] 在 0.239971160889s 中成功:无
[2013-07-27 20:49:20,266: 警告/PoolWorker-2] scope.rank_number="6"
[2013-07-27 20:49:20,266: 警告/PoolWorker-2] 标题: 标题 1,旧:6,新 6,趋势:假
[2013-07-27 20:49:20,268: 警告/PoolWorker-4] scope.rank_number="7"
[2013-07-27 20:49:20,268: 警告/PoolWorker-4] 标题: 标题 18,旧:7,新 7,趋势:假
[2013-07-27 20:49:20,286: 信息/MainProcess] 从代理 دریافت任务: scope.tasks.update_ranking[c013b17d-b195-4a0e-802f-29d0396c77d9]
[2013-07-27 20:49:20,287: 信息/MainProcess] 从代理 دریافت任务: scope.tasks.update_ranking[2719a228-9e9e-46e0-817f-b67e30e2b079]
[2013-07-27 20:49:20,287: 信息/MainProcess] 从代理 دریافت任务: scope.tasks.update_ranking[4b75414c-229c-409b-a79d-ae8648fdead4]
[2013-07-27 20:49:20,301: 信息/MainProcess] 任务 scope.tasks.update_ranking[3ee7310a-cee8-487e-9b93-ccab84d79305] 在 0.175172805786s 中成功:无
[2013-07-27 20:49:20,302: 信息/MainProcess] 从代理 دریافت任务: scope.tasks.update_ranking[1557ff8d-c336-43e0-b255-1f74def29a5e]
[2013-07