【发布时间】:2012-10-05 16:28:45
【问题描述】:
我正在使用 celery 和 django-celery。我已经定义了一个我想测试的定期任务。是否可以手动从 shell 运行定期任务以便我查看控制台输出?
【问题讨论】:
标签: python django celery django-celery celery-task
我正在使用 celery 和 django-celery。我已经定义了一个我想测试的定期任务。是否可以手动从 shell 运行定期任务以便我查看控制台输出?
【问题讨论】:
标签: python django celery django-celery celery-task
您是否尝试过仅从 Django shell 运行任务?您可以使用任务的.apply 方法来确保它在本地快速运行。
假设任务在 Django 应用程序 myapp 中的 tasks 子模块中调用 my_task:
$ python manage.py shell
>>> from myapp.tasks import my_task
>>> eager_result = my_task.apply()
结果实例与通常的 AsyncResult 类型具有相同的 API,只是结果总是在本地急切地求值,.apply() 方法将阻塞直到任务运行完成。
【讨论】:
manage.py 脚本。)抱歉。
如果您的意思是在条件不满足时触发任务,例如,周期时间不满足。您可以分两步完成。
1.获取您的任务 ID。
你可以通过打字来做到这一点。
celery inspect registered
您会看到类似app.tasks.update_something 的内容。
如果没有,可能是celery 没有启动。运行它。
2.使用celery call运行任务
celery call app.tasks.update_something
更多详情,只需输入
celery --help
celery inspect --help
celery call --help
【讨论】:
celery -A yourapp call app.tasks.update_something --kwargs='{"key": value,...}'
inspect 很棒,但不幸的是它只适用于“RabbitMQ (AMQP) 和 Redis 传输”。 (而不是像 filesystem 这样的其他人)
我认为您需要打开两个 shell:一个用于从 Python/Django shell 执行任务,另一个用于运行 celery worker (python manage.py celery worker)。正如前面的答案所说,您可以使用apply() 或apply_async() 运行任务
我已经编辑了答案,所以你没有使用过时的命令。
【讨论】: