我正在使用芹菜和django-celery。我定义了一个我想测试的定期任务。是否可以从外壳程序手动运行定期任务,以便查看控制台输出?
我正在使用芹菜和django-celery。我定义了一个我想测试的定期任务。是否可以从外壳程序手动运行定期任务,以便查看控制台输出?
Answers:
您是否尝试过仅从Django Shell运行任务?您可以使用.apply
任务的方法来确保它在本地积极运行。
假设在子模块的my_task
Django应用myapp
中调用了该任务tasks
:
$ python manage.py shell
>>> from myapp.tasks import my_task
>>> eager_result = my_task.apply()
结果实例具有与通常AsyncResult
类型相同的API ,不同之处在于,始终要在本地.apply()
迅速地评估结果,并且该方法将阻塞,直到任务运行完成为止。
manage.py
Django在所有Django项目目录中生成的脚本。)对不起。
如果您的意思是仅在不满足条件(例如,不满足定期时间)时触发任务。您可以分两个步骤进行操作。
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()
我已经编辑了答案,所以您不使用不推荐使用的命令。