如何在 Django 中运行和查看 celery 任务?

Posted

技术标签:

【中文标题】如何在 Django 中运行和查看 celery 任务?【英文标题】:How to run and view celery task in Django? 【发布时间】:2014-12-15 08:41:49 【问题描述】:

我正在开发一个用于学习目的的电子邮件爬虫 而且我无法理解如何运行任务并查看仍在后台运行的任务。

在我看来.py:

def home(request):
form = SignUpForm(request.POST or None)
if form.is_valid():
    save_it= form.save(commit=False)
    save_it.save()
    messages.success(request,"Working, please wait........")
    baseurl=form.cleaned_data['site']
    maxemails=form.cleaned_data['max_emails']
    maxurl=form.cleaned_data['max_links']
    startcraw.delay(baseurl,maxurl,maxemails)
    return HttpResponseRedirect('/done/')
#form not valid
return render_to_response("signup.html",locals(),context_instance=RequestContext(request))

在 tasks.py 我有:

from celery import task
from .craw import crawler
@task()
def startcraw(base,url,emails):
    f = open('myfile','w')
    f.write('hi there\n') # python will convert \n to os.linesep
    f.close()
    list= crawler(base,url,emails)
    list.save()

我尝试使用写入文件行进行调试

我如何知道爬虫是否正在运行以及如何将结果保存/拉到我的数据库 (SQLite) 任何帮助将不胜感激

【问题讨论】:

不要使用list作为变量名。 【参考方案1】:

您需要使用 Celery Logger。 简单例子:

from celery.utils.log import get_task_logger

logger = get_task_logger(__name__)

@app.task
def add(x, y):
    logger.info('started adding function at time 0'.format(datetime.now()))
    return x + y

这里是这样描述的: http://docs.celeryproject.org/en/latest/userguide/tasks.html#logging 实际上 Celery 有很好的文档,所以所有信息都可以在那里找到。 此外,我认为您需要计划任务来实现诸如爬行之类的目标。 http://celery.readthedocs.org/en/latest/userguide/periodic-tasks.html

【讨论】:

但由于某种原因我的 func startcraw 无法正常工作...,找不到文件名 myfile

以上是关于如何在 Django 中运行和查看 celery 任务?的主要内容,如果未能解决你的问题,请参考以下文章

如何调试在 Eclipse 中本地运行的 Celery/Django 任务

如何在 Django 1.11 中运行 celery worker

如何在 django celery 中处理未完成的任务

如何在任务中获取芹菜结果模型(使用 django-celery-results)

如何从 django 模板暂停和停止 celery 任务

Django 和 Celery 的示例:周期性任务