Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.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 如何从django模板暂停和停止芹菜任务_Python_Django_Celery_Celery Task - Fatal编程技术网

Python 如何从django模板暂停和停止芹菜任务

Python 如何从django模板暂停和停止芹菜任务,python,django,celery,celery-task,Python,Django,Celery,Celery Task,我正在开发一个django应用程序,它使用芹菜异步运行任务。现在,用户可以从网页提交表单,开始芹菜任务。但是,在django模板中单击一个按钮就无法暂停或停止任务 这是到目前为止我的代码 芹菜任务 在上面的任务中,我调用了一个return\u website\u list() output.html模板 我在网上搜索,像这样。但这些链接并没有帮助我实现我正在尝试的目标 提前感谢我的想法是创建一个名为“状态”的字段,并通过单击“暂停”按钮设置状态。在芹菜任务中,检查每个动作状态,如果处于暂停状态,

我正在开发一个django应用程序,它使用芹菜异步运行任务。现在,用户可以从网页提交表单,开始芹菜任务。但是,在django模板中单击一个按钮就无法暂停或停止任务

这是到目前为止我的代码

芹菜任务

在上面的任务中,我调用了一个
return\u website\u list()

output.html模板

我在网上搜索,像这样。但这些链接并没有帮助我实现我正在尝试的目标


提前感谢

我的想法是创建一个名为“状态”的字段,并通过单击“暂停”按钮设置状态。在芹菜任务中,检查每个动作状态,如果处于暂停状态,请等待1秒,然后再次检查。我以前将此想法用于取消操作

afaik,芹菜中没有内置API。此外,您可能需要某种自定义逻辑来获得暂停功能,因为Django/Cellery/Redis(或任何其他代理)无法知道每个任务的最后一个执行点在哪里。顺便说一句,您可以终止(也称为停止)任务,这比暂停更容易。参考:我最近回答了一个类似的问题——“如何从基于Django的站点管理任务的停止或重新启动?”:您可以很容易地根据您的使用需求进行调整。“如果你需要进一步解释,请告诉我。”本,我看到了你的答案。我该如何恢复一个部分按照你的逻辑执行的任务?@Ben Hi!谢谢你的回复。在回答中,您创建了一个模型
ScriptTracker()
,对吗?你能解释一下我在视图中放置
while
循环的位置吗?对不起,我对django和芹菜还是个新手,非常希望你能帮助我
@shared_task
def get_website(website):
    website_list = return_website_list(website)

    return website_list
<div class="container">
    <button class="pause_btn" type="button">Pause task</button>
    <button class="resume_btn" type="button">Resume task</button>
    <button class="stop_btn" type="button">Stop task</button>
</div>
def index(request):

    if request.method == 'POST':
        website = request.POST.get('website-name')
   
        get_website.delay(website)
        return redirect('output')

    return render(request, 'index.html')