我正在尝试使用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()
答案 0 :(得分:1)
如果在终端上运行命令(由任务执行的命令)会发生什么?如果它立即返回它可能是它自己的守护,请通过fork()
说。
测试原因的另一种方法是使用Django shell:python manage.py shell
,然后执行必要的导入以手动调用您的函数。