我有一个简单的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!这是为什么?
答案 0 :(得分:0)
问题最终是由安装在启动和执行任务的单独主机上安装的django-celery / celery Python包中的不同版本引起的。一个使用celery==3.1.7
而另一个使用celery==3.1.1
,这种差异足以触发行为。同步版本解决了问题。