Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从shell手动运行芹菜周期任务?_Python_Django_Celery_Django Celery_Celery Task - Fatal编程技术网

Python 如何从shell手动运行芹菜周期任务?

Python 如何从shell手动运行芹菜周期任务?,python,django,celery,django-celery,celery-task,Python,Django,Celery,Django Celery,Celery Task,我用的是芹菜和django芹菜。我已经定义了一个要测试的周期性任务。是否可以手动从shell运行周期性任务,以便我查看控制台输出?您是否刚刚尝试从Django shell运行该任务?您可以使用任务的.apply方法来确保它在本地急切地运行 假设任务在Django appmyapp的tasks子模块中被称为myu task: $ python manage.py shell >>> from myapp.tasks import my_task >>> eage

我用的是芹菜和django芹菜。我已经定义了一个要测试的周期性任务。是否可以手动从shell运行周期性任务,以便我查看控制台输出?

您是否刚刚尝试从Django shell运行该任务?您可以使用任务的
.apply
方法来确保它在本地急切地运行

假设任务在Django app
myapp
tasks
子模块中被称为
myu task

$ python manage.py shell
>>> from myapp.tasks import my_task
>>> eager_result = my_task.apply()

result实例与通常的
AsyncResult
类型具有相同的API,不同的是结果总是在本地进行急切的计算,并且
.apply()
方法将一直阻塞,直到任务运行完成。

我认为您需要打开两个shell:一个用于从Python/Django shell执行任务,一个用于运行
芹菜工人
python manage.py芹菜工人
)。正如前面的回答所说,您可以使用
apply()
apply\u async()


我已经编辑了答案,因此您没有使用不推荐的命令。

如果您的意思是在条件不满足时触发任务,例如,周期时间不满足。你可以分两步来做

1.获取您的任务id。

你可以通过打字来完成

celery inspect registered
您将看到类似于
app.tasks.update\u something
的内容。 如果没有,则可能是
芹菜
没有启动。只要运行它

2.使用
芹菜呼叫运行任务

celery call app.tasks.update_something
要了解更多详细信息,只需键入

celery --help
celery inspect --help
celery call --help

我怎样才能为金字塔项目做同样的事情?目录结构如下:/myproject=>celeryconfig.py、setup.py、development.py、/views/celerytasks=>myclerytask.py。现在,我想从命令行手动运行“myclerytask.py”(这是周期性任务)。你能帮忙吗?@workinphp很遗憾,我不熟悉金字塔,所以我根本不知道芹菜是如何与金字塔结合的。(请注意,我上面的解决方案是Django特有的,需要Django在所有Django项目目录中生成
manage.py
脚本。)抱歉.manage.py celeryd现在不推荐使用:它还支持args和kwargs$celery-A yourapp call app.tasks.update_something--kwargs='{“key”:value,}这非常有用,但在结尾缺少一个括号。更正:
Cellery-A yourapp call app.tasks.update_something--kwargs='{“key”:value,…}'
虽然
inspect
很棒,但不幸的是它只适用于“RabbitMQ(AMQP)和Redis传输”(而不是像
filesystem
这样的其他文件系统)