执行Python脚本作为Celery任务

时间:2014-07-10 23:06:50

标签: celery django-celery celery-task

我正在尝试使用Django将python脚本作为芹菜任务运行。我遇到的问题是,一旦脚本开始运行,任务就认为它已经完成。我最初在tasks.py文件中使用了subprocess.popen(),但意识到这意味着只要发出popen()命令就完成了任务。我修改了我的tasks.py代码来调用我的python脚本中的一个函数,该脚本运行脚本;但是,这仍然执行就像任务立即完成一样。我很困惑,因为在花中它表示任务已完成,但在芹菜日志中它输出我正在运行的脚本中定义的日志数据。我找到了以下related post。我相信我遵循其建议从tasks.py执行python函数。

tasks.py:

def exe(workDir, cancelRun):
    sys.path.append(workDir)
    import run

    if cancelRun=='True':
        task_id=exe.request.id
        revoke(task_id,terminate=True)
    else:
        run.runModel(workDir)
        task_id=exe.request.id
        return task_id

runModel函数代码:

def runModel(scendir):
    fullpath=scendir+'/run.py'
    os.chdir(scendir)
    p=Process(target=myMain,args=(scendir,))
    p.start()
    p.join()

1 个答案:

答案 0 :(得分:1)

如果在终端上运行命令(由任务执行的命令)会发生什么?如果它立即返回它可能是它自己的守护,请通过fork()说。

测试原因的另一种方法是使用Django shell:python manage.py shell,然后执行必要的导入以手动调用您的函数。