首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新`djcelery_periodictask`表时的死锁

更新`djcelery_periodictask`表时的死锁
EN

Stack Overflow用户
提问于 2015-02-10 10:15:21
回答 1查看 466关注 0票数 2

我有两个简单的周期性芹菜任务在晚上运行,一个在凌晨2点,另一个在凌晨3点,然后从时间上抛出关于djcelery_periodictask表上的死锁的异常(我不太理解)。似乎有一个任务试图更新djcelery_periodictask,而另一个任务仍然持有共享锁:

代码语言:javascript
复制
deadlock detected Detail: Process 32353 waits for ShareLock on transaction 39280165; blocked by process 32306. Process 32306 waits for ShareLock on transaction 39280166; blocked by process 32353. 
Process 32353: 
UPDATE "djcelery_periodictask" SET "name" = 'app.tasks.task1', "task" = 'app.tasks.task1', "interval_id" = NULL, "crontab_id" = 4, "args" = '[]', "kwargs" = '{}', "queue" = NULL, "exchange" = NULL, "routing_key" = NULL, "expires" = NULL, "enabled" = true, "last_run_at" = '2015-02-10 03:00:00.001297+01:00', "total_run_count" = 117, "date_changed" = '2015-02-10 02:00:00.010033+00:00', "description" = '' WHERE "djcelery_periodictask"."id" = 4 
Process 32306: 
UPDATE "djcelery_periodictask" SET "name" = 'app.tasks.task2', "task" = 'app.tasks.task2', "interval_id" = NULL, "crontab_id" = 6, "args" = '[]', "kwargs" = '{}', "queue" = NULL, "exchange" = NULL, "routing_key" = NULL, "expires" = NULL, "enabled" = true, "last_run_at" = '2015-02-10 02:00:00.014189+01:00', "total_run_count" = 63, "date_changed" = '2015-02-10 02:00:00.015097+00:00', "description" = '' WHERE "djcelery_periodictask"."id" = 6 
Hint: See server log for query details. Query: 
UPDATE "djcelery_periodictask" SET "name" = 'app.tasks.task2', "task" = 'appt.tasks.task2', "interval_id" = NULL, "crontab_id" = 4, "args" = '[]', "kwargs" = '{}', "queue" = NULL, "exchange" = NULL, "routing_key" = NULL, "expires" = NULL, "enabled" = true, "last_run_at"

这两个简单的更新怎么会导致死锁呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-13 09:13:02

我的问题是,我让我的所有工作人员从-B参数开始,该参数将每个工作人员转换为一个定期任务调度程序:

代码语言:javascript
复制
-B, --beat            Also run the celery beat periodic task scheduler.
                      Please note that there must only be one instance of
                      this service.

结果,计划的任务被多次启动,所有这些任务都同时启动,在尝试更新djcelery_periodictask表时创建了一个死锁。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28429091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档