将 Python 脚本作为 Celery 任务执行

Jas*_*ins 5 celery celery-task django-celery

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

任务.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
Run Code Online (Sandbox Code Playgroud)

runModel 函数代码:

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

jwe*_*ich 1

如果您在终端上运行命令(由您的任务执行的命令),会发生什么?如果它立即返回,则它可能正在对自身进行守护进程,比方说 via fork()

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