芹菜任务 - 如何获得自定义状态?

时间:2016-03-22 19:54:04

标签: python task celery celery-task

我有许多Celery任务,它们是长期运行的进程。因此,我想实现自定义状态以查询其进度。

根据the documentation,为给定任务实现自定义状态非常容易。

def download_count(wget_base_path):
    # recursively traverse root folder and return count of files
    return sum([len(files) for r, d, files in os.walk(wget_base_path)])

@app.task(bind = True)
def html_download(self, url='', cl_id=-1):

    log = get_logger(__name__)
    ...
    # wget download location
    wget_base_path = settings.WGET_PATH + str(cl_id) 

    os.system(wget_cmd)

    if not self.request.called_directly:
        log.debug('State progress called')
        self.update_state(state = 'PROGRESS', meta = {'item_count' : download_count(wget_base_path)})

现在,当我通过

打电话时
from app.ingest.tasks import html

ingest = html.html_download.delay(url, 54431)

这项工作按预期开始。但是,每当我尝试获取更新状态时,我都不会获得任何元数据。

例如,

In [6]: ingest.state
Out[6]: 'PENDING'


In [10]: ingest._get_task_meta()
Out[10]: {'result': None, 'status': 'PENDING'}

对于wget命令的os.system调用是否阻塞了所有内容?如果我使用subprocess,则在执行chold过程时任务会很快完成。

0 个答案:

没有答案