为什么Django-Celery安排长期ETA?

时间:2014-01-03 04:15:01

标签: python celery django-celery

我有一个简单的Django Celery任务,如:

@task(name="upload_file_to_cdn", max_retries=10)
def upload_file_to_cdn(file_id):
    stuff

当我通过Django shell启动它时:

./manage shell
from myapp.tasks import upload_file_to_cdn
upload_file_to_cdn.apply_async(args=(123,))

Celery报告它立即运行:

tail -f /var/log/celeryd.log
[2014-01-02 22:54:18,694: INFO/MainProcess] Received task: tasks.upload_file_to_cdn[6e58b72b-8832-427d-a6b8-574f71ac9baa]
[2014-01-02 22:54:18,698: DEBUG/MainProcess] Task accepted: tasks.upload_file_to_cdn[6e58b72b-8832-427d-a6b8-574f71ac9baa] pid:5007
[2014-01-02 22:54:18,714: WARNING/Worker-1] Uploading file 123...

但是,当我在Django视图中运行完全相同的行upload_file_to_cdn.apply_async(args=(123,))时,我在celeryd.log中看到的只有:

[2014-01-02 22:47:04,006: INFO/MainProcess] Received task: tasks.upload_file_to_cdn[cb8be827-4604-4aa8-81b0-879657827e63] eta:[2014-01-03 03:47:19.004160-05:00]

正如您所看到的,它不仅不会立即执行任务,而且还会在大约6小时后设置ETA!这是为什么?

1 个答案:

答案 0 :(得分:0)

问题最终是由安装在启动和执行任务的单独主机上安装的django-celery / celery Python包中的不同版本引起的。一个使用celery==3.1.7而另一个使用celery==3.1.1,这种差异足以触发行为。同步版本解决了问题。