Luigi 无法完成 require 方法中列出的所有任务
Luigi fails to finish all tasks listed in the require method
假设我有一个具有以下依赖结构的任务
class ParentTask(luigi.Task):
def requires(self):
return [ChildTask(classLevel=x) for x in self.class_level_list]
def run(self):
yadayda
子任务自己运行良好。父级正确检查所有子任务的完成状态。然而,当第一个子任务完成时,调度程序将父任务标记为已完成。带有以下消息:
Scheduled 15 tasks of which:
* 3 ran successfully:
- 1 CleanRecord(...)
- 1 EstimateQuestionParameter(classLevel=6, qdt=2016-04-19, subject=english)
- 1 GetLog(classLevel=6, qdt=2016-04-19, subject=english)
* 12 were left pending, among these:
* 12 were left pending because of unknown reason:
- 5 EstimateQuestionParameter(classLevel=1...5, qdt=2016-04-19, subject=english)
- 5 GetLog(pool=None, classLevel=1...5, qdt=2016-04-19, subject=english)
- 1 UpdateQuestionParameter(qdt=2016-04-19, lastQdt=2016-03-23, subject=english, isInit=False)
- 1 UpdateQuestionParameterBuffer(qdt=2016-04-19, subject=english, src_table=edw.edw_behavior_question_record_exam_new)
This progress looks :) because there were no failed tasks or missing external dependencies
我认为发生这种情况是因为您的工作人员与调度程序断开连接。由于网络分区,工作人员的心跳未到达调度程序,或者更有可能是因为它们从未发送过issue。
您有两种解决问题的方法:
- 增加
worker-disconnect-delay
设置(配置中的[scheduler]
部分,默认60秒)
- 为您的工作雇用不止一名工人,例如
--workers 2
(如果是后一种原因)
假设我有一个具有以下依赖结构的任务
class ParentTask(luigi.Task):
def requires(self):
return [ChildTask(classLevel=x) for x in self.class_level_list]
def run(self):
yadayda
子任务自己运行良好。父级正确检查所有子任务的完成状态。然而,当第一个子任务完成时,调度程序将父任务标记为已完成。带有以下消息:
Scheduled 15 tasks of which:
* 3 ran successfully:
- 1 CleanRecord(...)
- 1 EstimateQuestionParameter(classLevel=6, qdt=2016-04-19, subject=english)
- 1 GetLog(classLevel=6, qdt=2016-04-19, subject=english)
* 12 were left pending, among these:
* 12 were left pending because of unknown reason:
- 5 EstimateQuestionParameter(classLevel=1...5, qdt=2016-04-19, subject=english)
- 5 GetLog(pool=None, classLevel=1...5, qdt=2016-04-19, subject=english)
- 1 UpdateQuestionParameter(qdt=2016-04-19, lastQdt=2016-03-23, subject=english, isInit=False)
- 1 UpdateQuestionParameterBuffer(qdt=2016-04-19, subject=english, src_table=edw.edw_behavior_question_record_exam_new)
This progress looks :) because there were no failed tasks or missing external dependencies
我认为发生这种情况是因为您的工作人员与调度程序断开连接。由于网络分区,工作人员的心跳未到达调度程序,或者更有可能是因为它们从未发送过issue。
您有两种解决问题的方法:
- 增加
worker-disconnect-delay
设置(配置中的[scheduler]
部分,默认60秒) - 为您的工作雇用不止一名工人,例如
--workers 2
(如果是后一种原因)