【问题标题】:celery/redis task recieved multiple times rapidly.celery/redis 任务快速收到多次。
【发布时间】:2014-12-10 18:08:15
【问题描述】:

我使用 django-celery 发布了两个倒计时任务,必须在 2014-10-15 06:452014-10-15 08:45 运行。

这是我使用--loglevel=INFO运行时的日志

[2014-10-15 03:58:19,885: WARNING/MainProcess] celery@web468.webfaction.com ready.    
[2014-10-15 05:57:08,777: INFO/MainProcess] Received task: mysite.celery.send_session_emails[e34174e2-543d-43aa-a7b0-a32b8be81644] eta:[2014-10-15 06:45:53.701697-04:00]

[2014-10-15 05:57:08,778: INFO/MainProcess] Received task: mysite.celery.send_session_emails[08c7935f-7546-428c-a8c5-1e25e0675b12] eta:[2014-10-15 08:45:53.745062-04:00] 

[2014-10-15 06:45:54,704: INFO/MainProcess] Task mysite.celery.send_session_emails[e34174e2-543d-43aa-a7b0-a32b8be81644] succeeded in 0.683478601277s: None  
<-- Great the task at 6:45 executed correctly...


[2014-10-15 06:58:09,522: INFO/MainProcess] Received task: mysite.celery.send_session_emails[08c7935f-7546-428c-a8c5-1e25e0675b12] eta:[2014-10-15 08:45:53.745062-04:00]
[2014-10-15 07:58:09,711: INFO/MainProcess] Received task: mysite.celery.send_session_emails[08c7935f-7546-428c-a8c5-1e25e0675b12] eta:[2014-10-15 08:45:53.745062-04:00] 
<-- who published there two tasks,, i checked my code and i am sure that i didn't published them   

[2014-10-15 08:45:55,469: INFO/MainProcess] Task mysite.celery.send_session_emails[08c7935f-7546-428c-a8c5-1e25e0675b12] succeeded in 0.410996085964s: None
[2014-10-15 08:45:55,815: INFO/MainProcess] Task mysite.celery.send_session_emails[08c7935f-7546-428c-a8c5-1e25e0675b12] succeeded in 0.345424972009s: None
[2014-10-15 08:45:56,292: INFO/MainProcess] Task mysite.celery.send_session_emails[08c7935f-7546-428c-a8c5-1e25e0675b12] succeeded in 0.47599364398s: None
<-- executed 3 tasks at 8:45, i actually published one at 8:45.

我的问题是why did celery automatically published those two tasks? ie

[2014-10-15 06:58:09,522: INFO/MainProcess] Received task: mysite......
[2014-10-15 07:58:09,711: INFO/MainProcess] Received task: mysite........

【问题讨论】:

  • 似乎是可见性超时的问题(Redis 的默认可见性超时为 1 小时),并且任务(如果未执行)在 1 小时持续时间后再次自动发布。那么我怎样才能停止这种自动重新发布呢?

标签: django celery django-celery celery-task


【解决方案1】:

我将我的 celery 经纪人切换到 SQLalchemy 以避免这个问题。它解决了 ETA 任务的多次执行错误。

安装 SQLAlchemy 由:

pip install SQLAlchemy

更新了 settings.py

BROKER_URL='sqla+mysql://<mysql user>:<mysql password>@localhost/<mysql db_name>'

【讨论】:

    猜你喜欢
    • 2021-09-28
    • 2014-09-14
    • 2017-04-16
    • 2018-08-06
    • 2017-10-29
    • 1970-01-01
    • 2012-01-22
    • 2016-10-30
    • 2017-10-11
    相关资源
    最近更新 更多