Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.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 任务管理守护进程_Python_Django_Task - Fatal编程技术网

Python 任务管理守护进程

Python 任务管理守护进程,python,django,task,Python,Django,Task,我必须用我的django ORM数据做一些长时间(我想是2-3天)的任务。我环顾四周,没有找到任何好的解决办法 django任务-没有很好的文档记录,我也不知道如何使用它 芹菜对我的工作来说太多了适合长时间工作吗? 因此,我需要做的是,从数据库中获取所有数据或部分数据,如: Entry.objects.all() 然后我需要为QuerySet中的每一个执行相同的函数 我想大概需要2-3天 那么,也许有人能给我解释一下如何建造它 附言:目前我只有一个想法,使用cron和数据库来存储流程执行时间表

我必须用我的django ORM数据做一些长时间(我想是2-3天)的任务。我环顾四周,没有找到任何好的解决办法

django任务-没有很好的文档记录,我也不知道如何使用它

芹菜对我的工作来说太多了适合长时间工作吗?

因此,我需要做的是,从数据库中获取所有数据或部分数据,如:

Entry.objects.all()
然后我需要为QuerySet中的每一个执行相同的函数

我想大概需要2-3天

那么,也许有人能给我解释一下如何建造它


附言:目前我只有一个想法,使用cron和数据库来存储流程执行时间表

使用芹菜子任务。这将允许您启动一个长时间运行的任务(在它下面有许多短时间运行的子任务),并在Cellery的任务结果存储中保留关于它的执行状态的良好数据。作为额外的好处,子任务将分布在工作进程中,允许您充分利用多核服务器甚至多个服务器,以减少任务运行时间

编辑:示例:

import time, logging as log
from celery.task import task
from celery.task.sets import TaskSet
from app import Entry

@task(send_error_emails=True)
def long_running_analysis():
    entries = list(Entry.objects.all().values('id'))
    num_entries = len(entries)
    taskset = TaskSet(analyse_entry.subtask(entry.id) for entry in entries)
    results = taskset.apply_async()
    while not results.ready()
        time.sleep(10000)
        print log.info("long_running_analysis is %d% complete",
                       completed_count()*100/num_entries)
    if results.failed():
        log.error("Analysis Failed!")
    result_set = results.join() # brings back results in 
                                # the order of entries
    #perform collating or count or percentage calculations here
    log.error("Analysis Complete!")

@task
def analyse_entry(id): # inputs must be serialisable
    logger = analyse_entry.get_logger()
    entry = Entry.objects.get(id=id)
    try:
        analysis = entry.analyse()
        logger.info("'%s' found to be %s.", entry, analysis['status'])
        return analysis # must be a dict or serialisable.
    except Exception as e:
        logger.error("Could not process '%s': %s", entry, e)
        return None 

如果您的计算无法分为每项任务,则始终可以将其设置为一个子任务执行计数,一个子任务执行另一种分析类型。这仍然有效,并且仍然允许您从Pareleleism中受益。

芹菜适合长时间或短时间的任务。显然,最好是拆分任务,这样您就可以重试失败的部分,等等。但芹菜确实适用于长时间的工作,许多人确实使用它。芹菜适合长时间的工作。而且,芹菜永远不会默默地失去任务。