Luigi“任务未由调度程序授予运行许可”

时间:2019-04-06 01:01:05

标签: python luigi

我正在尝试动态创建Luigi任务(基于cmdList中的属性),并使上一个任务成为下一个任务的依存关系。 SQLTask是Luigi.Task的子类。但是,运行此代码时,我得到This progress looks :| because there were tasks that were not granted run permission by the scheduler 我想念什么?

class BDX_Task(SQLTask):
    acctDate = luigi.Parameter()
    ssisDate = luigi.Parameter(default=None)
    queryKey = luigi.Parameter()
    queryCmd = luigi.Parameter()
    runDesc = luigi.Parameter()
    dependQry = luigi.Parameter()

    def run(self):
        print(subprocess.call(self.queryCmd, shell=True))
        self.get_target().touch()

def dep_s_dep(cmdList, dep1):
    """
        This returns dependency task's dependency 
    """
    dep2 = [(key,cmd,dep) for key, cmd, dep in cmdList if key==dep1]
    return dep2[0]

class BDX_Query_0XX(SQLTask):
    acctDate = luigi.Parameter()
    ssisDate = luigi.Parameter()  
    runDesc = luigi.Parameter()
    depend_task = ""

    def run(self):
        YY = self.acctDate[:4]
        MM = self.acctDate[4:6]
        acctDate = self.acctDate
        ssisDate = self.ssisDate
        runDesc = self.runDesc
        bdx_sql = r'r:\\1.SQL\\BDX_SQL\\'
        cmdList = [
                ('BDX010',f'{bdx_sql}BDX_001_NI_DM 010.sql -o output010.txt',None),
                ('BDX020',f'{bdx_sql}BDX_001_NI_DM 020.sql -o output020.txt','BDX010'),
                ('BDX022a',f'{bdx_sql}BDX_022_P038_All_Final_CatAdj 010.sql -o output022a.txt','BDX020'),
                ('BDX022b',f'{bdx_sql}BDX_022_P038_All_Final_CatAdj 020.sql -o output022b.txt -v Year1={YY} MM={MM}','BDX022a'),
                ('BDX022c',f'{bdx_sql}BDX_022_P038_All_Final_CatAdj 030.sql -o output022c.txt -v Year={YY} Month={MM}', 'BDX022b'),
                ('BDX023',f'{bdx_sql}BDX_023_P031_MTD_All_Final_CatAdj.sql -o output023.txt ','BDX020'),
                ('BDX024',f'{bdx_sql}BDX_024_P031_ITD_All_Final_CatAdj.sql -o output024.txt','BDX020'),
                ('BDX025a',f'{bdx_sql}BDX_025_P038_All_Final_CatAdj 010.sql -o output025a.txt','BDX020'),
                ('BDX025b',f'{bdx_sql}BDX_025_P038_All_Final_CatAdj 020.sql -o output025b.txt -v Year={YY} Month={MM}','BDX025a'),
                ('BDX025c',f'{bdx_sql}BDX_025_P038_All_Final_CatAdj 030.sql -o output025c.txt -v YYMM={acctDate}','BDX025b')
            ]

        tasks = []
        for queryKey, queryCmd, dependQry in cmdList:
        class_name = queryKey

        klass = type(queryKey, (BDX_Task,),{}) # {'acctDate': self.acctDate, 'queryKey': queryKey, 'queryCmd': queryCmd, 'runDesc': self.runDesc, 'dependQry': dependQry})

        if dependQry != '':
            dep1 = dep_s_dep(cmdList, dependQry) # info about dependency task (key, cmd, dep's dep)
            print(f"{queryKey}'s dep1", dep1)
            depend_task = [globals()[dependQry](acctDate=self.acctDate,
                                                ssisDate=self.ssisDate,
                                                queryKey=dep1[0],
                                                queryCmd=dep1[1],
                                                runDesc=self.runDesc,
                                                dependQry=dep1[2])]

            def requires1(cls):
                return depend_task

            setattr(klass, "requires", classmethod(requires1))

        globals()[queryKey] = klass  # make the class available at the module level

        tasks.append(globals()[queryKey](acctDate=self.acctDate, ssisDate =self.ssisDate, queryKey = queryKey, queryCmd = queryCmd, runDesc = self.runDesc, dependQry = dependQry)) # this addes Task class named after queryKey to dependency
    yield tasks

        self.get_target().touch()

===========堆栈跟踪

C:\ProgramData\Anaconda3\python.exe R:/1.PY/DataPipeLine/run_BDX_process.py BDX_Query_Main --local-scheduler
DEBUG: Checking if BDX_Query_Main(acctDate=201904, ssisDate=201905) is complete
DEBUG: Checking if BDX_Query_9XX(acctDate=201904, ssisDate=201905, runDesc=201904 Luigi test1) is complete
INFO: Informed scheduler that task   BDX_Query_Main_201904_201905_444c47aebc   has status   PENDING
DEBUG: Checking if BDX_Query_0XX(acctDate=201904, ssisDate=201905, runDesc=201904 Luigi test1) is complete
BDX020's dep1 ('BDX010', '"r:\\1.SQL\\BDX_SQL\\BDX_001_NI_DM 010.sql" -S LWVPDBSQLC070 ', '')
BDX022a's dep1 ('BDX020', '"r:\\1.SQL\\BDX_SQL\\BDX_001_NI_DM 020.sql"  ', 'BDX010')
BDX022b's dep1 ('BDX022a', '"r:\\1.SQL\\BDX_SQL\\BDX_022_P038_All_Final_CatAdj 010.sql"  -S LWVPDBSQLC070 ', 'BDX020')
BDX022c's dep1 ('BDX022b', '"r:\\1.SQL\\BDX_SQL\\BDX_022_P038_All_Final_CatAdj 020.sql"  -S LWVPDBSQLC070  -v Year1=2019 MM=04', 'BDX022a')
BDX023's dep1 ('BDX020', '"r:\\1.SQL\\BDX_SQL\\BDX_001_NI_DM 020.sql"  ', 'BDX010')
BDX024's dep1 ('BDX020', '"r:\\1.SQL\\BDX_SQL\\BDX_001_NI_DM 020.sql"  ', 'BDX010')
BDX025a's dep1 ('BDX020', '"r:\\1.SQL\\BDX_SQL\\BDX_001_NI_DM 020.sql"  ', 'BDX010')
BDX025b's dep1 ('BDX025a', '"r:\\1.SQL\\BDX_SQL\\BDX_025_P038_All_Final_CatAdj 010.sql"  -S LWVPDBSQLC070 ', 'BDX020')
BDX025c's dep1 ('BDX025b', '"r:\\1.SQL\\BDX_SQL\\BDX_025_P038_All_Final_CatAdj 020.sql"  -S LWVPDBSQLC070  -v Year=2019 Month=04', 'BDX025a')
INFO: Informed scheduler that task   BDX_Query_9XX_201904_201904_Luigi_tes_201905_db874019d2   has status   PENDING
INFO: Informed scheduler that task   BDX_Query_0XX_201904_201904_Luigi_tes_201905_db874019d2   has status   PENDING
INFO: Done scheduling tasks
INFO: Running Worker with 1 processes
DEBUG: Asking scheduler for work...
DEBUG: Pending tasks: 3
INFO: [pid 6820] Worker Worker(salt=931855678, workers=1, host=LWVPWEACT001, username=i805649, pid=6820) running   BDX_Query_0XX(acctDate=201904, ssisDate=201905, runDesc=201904 Luigi test1)
INFO: [pid 6820] Worker Worker(salt=931855678, workers=1, host=LWVPWEACT001, username=i805649, pid=6820) new requirements      BDX_Query_0XX(acctDate=201904, ssisDate=201905, runDesc=201904 Luigi test1)
DEBUG: 1 running tasks, waiting for next task to finish
DEBUG: Checking if BDX010(acctDate=201904, ssisDate=201905, queryKey=BDX010, queryCmd="r:\1.SQL\BDX_SQL\BDX_001_NI_DM 010.sql" -S LWVPDBSQLC070 , runDesc=201904 Luigi test1, dependQry=) is complete
INFO: Informed scheduler that task   BDX010_201904___r__1_SQL_BDX_SQ_c7c8473ba5   has status   DONE
DEBUG: Checking if BDX020(acctDate=201904, ssisDate=201905, queryKey=BDX020, queryCmd="r:\1.SQL\BDX_SQL\BDX_001_NI_DM 020.sql"  , runDesc=201904 Luigi test1, dependQry=BDX010) is complete
DEBUG: Checking if BDX025b(acctDate=201904, ssisDate=201905, queryKey=BDX025b, queryCmd="r:\1.SQL\BDX_SQL\BDX_025_P038_All_Final_CatAdj 020.sql"  -S LWVPDBSQLC070  -v Year=2019 Month=04, runDesc=201904 Luigi test1, dependQry=BDX025a) is complete
INFO: Informed scheduler that task   BDX020_201904_BDX010__r__1_SQL_BDX_SQ_573b857d50   has status   PENDING
INFO: Informed scheduler that task   BDX025b_201904_BDX025a__r__1_SQL_BDX_SQ_eef5a35ad5   has status   PENDING
DEBUG: Checking if BDX022a(acctDate=201904, ssisDate=201905, queryKey=BDX022a, queryCmd="r:\1.SQL\BDX_SQL\BDX_022_P038_All_Final_CatAdj 010.sql"  -S LWVPDBSQLC070 , runDesc=201904 Luigi test1, dependQry=BDX020) is complete
DEBUG: Checking if BDX025b(acctDate=201904, ssisDate=201905, queryKey=BDX025b, queryCmd="r:\1.SQL\BDX_SQL\BDX_025_P038_All_Final_CatAdj 020.sql"  -S LWVPDBSQLC070  -v Year=2019 Month=04, runDesc=201904 Luigi test1, dependQry=BDX025a) is complete
INFO: Informed scheduler that task   BDX022a_201904_BDX020__r__1_SQL_BDX_SQ_7a4a9cc485   has status   PENDING
INFO: Informed scheduler that task   BDX025b_201904_BDX025a__r__1_SQL_BDX_SQ_eef5a35ad5   has status   PENDING
DEBUG: Checking if BDX022b(acctDate=201904, ssisDate=201905, queryKey=BDX022b, queryCmd="r:\1.SQL\BDX_SQL\BDX_022_P038_All_Final_CatAdj 020.sql"  -S LWVPDBSQLC070  -v Year1=2019 MM=04, runDesc=201904 Luigi test1, dependQry=BDX022a) is complete
DEBUG: Checking if BDX025b(acctDate=201904, ssisDate=201905, queryKey=BDX025b, queryCmd="r:\1.SQL\BDX_SQL\BDX_025_P038_All_Final_CatAdj 020.sql"  -S LWVPDBSQLC070  -v Year=2019 Month=04, runDesc=201904 Luigi test1, dependQry=BDX025a) is complete
INFO: Informed scheduler that task   BDX022b_201904_BDX022a__r__1_SQL_BDX_SQ_313dc66c50   has status   PENDING
INFO: Informed scheduler that task   BDX025b_201904_BDX025a__r__1_SQL_BDX_SQ_eef5a35ad5   has status   PENDING
DEBUG: Checking if BDX022c(acctDate=201904, ssisDate=201905, queryKey=BDX022c, queryCmd="r:\1.SQL\BDX_SQL\BDX_022_P038_All_Final_CatAdj 030.sql"  -v Year=2019 Month=04, runDesc=201904 Luigi test1, dependQry=BDX022b) is complete
DEBUG: Checking if BDX025b(acctDate=201904, ssisDate=201905, queryKey=BDX025b, queryCmd="r:\1.SQL\BDX_SQL\BDX_025_P038_All_Final_CatAdj 020.sql"  -S LWVPDBSQLC070  -v Year=2019 Month=04, runDesc=201904 Luigi test1, dependQry=BDX025a) is complete
INFO: Informed scheduler that task   BDX022c_201904_BDX022b__r__1_SQL_BDX_SQ_d198713a82   has status   PENDING
INFO: Informed scheduler that task   BDX025b_201904_BDX025a__r__1_SQL_BDX_SQ_eef5a35ad5   has status   PENDING
DEBUG: Checking if BDX023(acctDate=201904, ssisDate=201905, queryKey=BDX023, queryCmd="r:\1.SQL\BDX_SQL\BDX_023_P031_MTD_All_Final_CatAdj.sql"  , runDesc=201904 Luigi test1, dependQry=BDX020) is complete
DEBUG: Checking if BDX025b(acctDate=201904, ssisDate=201905, queryKey=BDX025b, queryCmd="r:\1.SQL\BDX_SQL\BDX_025_P038_All_Final_CatAdj 020.sql"  -S LWVPDBSQLC070  -v Year=2019 Month=04, runDesc=201904 Luigi test1, dependQry=BDX025a) is complete
INFO: Informed scheduler that task   BDX023_201904_BDX020__r__1_SQL_BDX_SQ_236e57639e   has status   PENDING
INFO: Informed scheduler that task   BDX025b_201904_BDX025a__r__1_SQL_BDX_SQ_eef5a35ad5   has status   PENDING
DEBUG: Checking if BDX024(acctDate=201904, ssisDate=201905, queryKey=BDX024, queryCmd="r:\1.SQL\BDX_SQL\BDX_024_P031_ITD_All_Final_CatAdj.sql" , runDesc=201904 Luigi test1, dependQry=BDX020) is complete
DEBUG: Checking if BDX025b(acctDate=201904, ssisDate=201905, queryKey=BDX025b, queryCmd="r:\1.SQL\BDX_SQL\BDX_025_P038_All_Final_CatAdj 020.sql"  -S LWVPDBSQLC070  -v Year=2019 Month=04, runDesc=201904 Luigi test1, dependQry=BDX025a) is complete
INFO: Informed scheduler that task   BDX024_201904_BDX020__r__1_SQL_BDX_SQ_1a8ad5a673   has status   PENDING
INFO: Informed scheduler that task   BDX025b_201904_BDX025a__r__1_SQL_BDX_SQ_eef5a35ad5   has status   PENDING
DEBUG: Checking if BDX025a(acctDate=201904, ssisDate=201905, queryKey=BDX025a, queryCmd="r:\1.SQL\BDX_SQL\BDX_025_P038_All_Final_CatAdj 010.sql"  -S LWVPDBSQLC070 , runDesc=201904 Luigi test1, dependQry=BDX020) is complete
DEBUG: Checking if BDX025b(acctDate=201904, ssisDate=201905, queryKey=BDX025b, queryCmd="r:\1.SQL\BDX_SQL\BDX_025_P038_All_Final_CatAdj 020.sql"  -S LWVPDBSQLC070  -v Year=2019 Month=04, runDesc=201904 Luigi test1, dependQry=BDX025a) is complete
INFO: Informed scheduler that task   BDX025a_201904_BDX020__r__1_SQL_BDX_SQ_91bd598abf   has status   PENDING
INFO: Informed scheduler that task   BDX025b_201904_BDX025a__r__1_SQL_BDX_SQ_eef5a35ad5   has status   PENDING
DEBUG: Checking if BDX025b(acctDate=201904, ssisDate=201905, queryKey=BDX025b, queryCmd="r:\1.SQL\BDX_SQL\BDX_025_P038_All_Final_CatAdj 020.sql"  -S LWVPDBSQLC070  -v Year=2019 Month=04, runDesc=201904 Luigi test1, dependQry=BDX025a) is complete
INFO: Informed scheduler that task   BDX025b_201904_BDX025a__r__1_SQL_BDX_SQ_eef5a35ad5   has status   PENDING
DEBUG: Checking if BDX025c(acctDate=201904, ssisDate=201905, queryKey=BDX025c, queryCmd="r:\1.SQL\BDX_SQL\BDX_025_P038_All_Final_CatAdj 030.sql"  -v YYMM=201904, runDesc=201904 Luigi test1, dependQry=BDX025b) is complete
DEBUG: Checking if BDX025b(acctDate=201904, ssisDate=201905, queryKey=BDX025b, queryCmd="r:\1.SQL\BDX_SQL\BDX_025_P038_All_Final_CatAdj 020.sql"  -S LWVPDBSQLC070  -v Year=2019 Month=04, runDesc=201904 Luigi test1, dependQry=BDX025a) is complete
INFO: Informed scheduler that task   BDX025c_201904_BDX025b__r__1_SQL_BDX_SQ_c98f5f14c3   has status   PENDING
INFO: Informed scheduler that task   BDX025b_201904_BDX025a__r__1_SQL_BDX_SQ_eef5a35ad5   has status   PENDING
INFO: Informed scheduler that task   BDX_Query_0XX_201904_201904_Luigi_tes_201905_db874019d2   has status   PENDING
DEBUG: Asking scheduler for work...
DEBUG: Done
DEBUG: There are no more tasks to run at this time
DEBUG: There are 12 pending tasks possibly being run by other workers
DEBUG: There are 12 pending tasks unique to this worker
DEBUG: There are 12 pending tasks last scheduled by this worker
INFO: Worker Worker(salt=931855678, workers=1, host=LWVPWEACT001, username=i805649, pid=6820) was stopped. Shutting down Keep-Alive thread
INFO: 
===== Luigi Execution Summary =====

Scheduled 14 tasks of which:
* 1 complete ones were encountered:
    - 1 BDX010(acctDate=201904, ssisDate=201905, queryKey=BDX010, queryCmd="r:\1.SQL\BDX_SQL\BDX_001_NI_DM 010.sql" -S LWVPDBSQLC070 , runDesc=201904 Luigi test1, dependQry=)
* 13 were left pending, among these:
    * 1 were missing external dependencies:
        - 1 BDX_Query_0XX(acctDate=201904, ssisDate=201905, runDesc=201904 Luigi test1)
    * 2 had missing dependencies:
        - 1 BDX_Query_9XX(acctDate=201904, ssisDate=201905, runDesc=201904 Luigi test1)
        - 1 BDX_Query_Main(acctDate=201904, ssisDate=201905)
    * 10 was not granted run permission by the scheduler:
        - 1 BDX020(acctDate=201904, ssisDate=201905, queryKey=BDX020, queryCmd="r:\1.SQL\BDX_SQL\BDX_001_NI_DM 020.sql"  , runDesc=201904 Luigi test1, dependQry=BDX010)
        - 1 BDX022a(acctDate=201904, ssisDate=201905, queryKey=BDX022a, queryCmd="r:\1.SQL\BDX_SQL\BDX_022_P038_All_Final_CatAdj 010.sql"  -S LWVPDBSQLC070 , runDesc=201904 Luigi test1, dependQry=BDX020)
        - 1 BDX022b(...)
        - 1 BDX022c(acctDate=201904, ssisDate=201905, queryKey=BDX022c, queryCmd="r:\1.SQL\BDX_SQL\BDX_022_P038_All_Final_CatAdj 030.sql"  -v Year=2019 Month=04, runDesc=201904 Luigi test1, dependQry=BDX022b)
        - 1 BDX023(acctDate=201904, ssisDate=201905, queryKey=BDX023, queryCmd="r:\1.SQL\BDX_SQL\BDX_023_P031_MTD_All_Final_CatAdj.sql"  , runDesc=201904 Luigi test1, dependQry=BDX020)
        ...

Did not run any tasks
This progress looks :| because there were tasks that were not granted run permission by the scheduler

===== Luigi Execution Summary =====


Process finished with exit code 0

2 个答案:

答案 0 :(得分:2)

我认为您正在使这一过程变得比它需要的复杂。首先,当直到运行时才知道完整的任务列表时,动态依赖项才有用。例如,您可能遇到一种情况,必须运行一个任务来查询数据库,并且查询返回的每一行都需要一个新的依赖项。

这与使用编程方式创建一组任务及其依赖关系截然不同,这就像您在示例中所做的那样。

以下玩具代码显示了如何实现您想做的事情:

import luigi
import datetime
import logging

logger = logging.getLogger('luigi-interface')

task_list = {
    'taskA': ['taskA_command', ''],
    'taskB': ['taskB command', 'taskA'],
    'taskC': ['taskC command', 'taskA'],
    'taskD': ['taskD command', 'taskB'],
}

// Equivalent of your BDX_Task class
class MyTask(luigi.Task):

    task_date = luigi.DateParameter()
    task_name = luigi.Parameter()
    task_command = luigi.Parameter()
    dependent_task_name = luigi.Parameter()

    def __init__(self, *args, **kwargs):
        super(MyTask, self).__init__(*args, **kwargs)
        logger.debug('MyTask.__init__ called for task_name="{}"'.format(self.task_name))

    def output(self):
        filename = 'output_files/{date:%Y%m%d}/{name}.output'.format(date=self.task_date,name=self.task_name)
        return luigi.LocalTarget(filename)

    def requires(self):
        if self.dependent_task_name != '' and self.dependent_task_name in task_list:
            dependent_task_command, next_dependent_task_name = task_list[self.dependent_task_name]
            return [self.__class__(
                task_date=self.task_date,
                task_name=self.dependent_task_name,
                task_command=dependent_task_command,
                dependent_task_name=next_dependent_task_name,
            )]
        else:
            return []

    def run(self):
        with self.output().open('w') as handle:
            handle.write('Command to run: "{cmd}"'.format(cmd=self.task_command))


// Equivalent of your BDX_Query_0XX class
class myWrapperTask(luigi.WrapperTask):
    task_date = luigi.DateParameter(default=datetime.date.today())

    def requires(self):
        for task_name, (task_command, dep_name) in task_list.items():
            yield MyTask(
                task_date=self.task_date,
                task_name=task_name,
                task_command=task_command,
                dependent_task_name=dep_name,
            )

生成的输出

$ PYTHON_PATH=.:$PYTHON_PATH && python -m luigi --module dynamic_dependencies myWrapperTask --local-scheduler --log-level INFO
MyTask.__init__ called for task_name="taskA"
MyTask.__init__ called for task_name="taskB"
MyTask.__init__ called for task_name="taskC"
MyTask.__init__ called for task_name="taskD"
INFO: Informed scheduler that task   myWrapperTask_2019_04_12_c2195ac5bd   has status   PENDING
INFO: Informed scheduler that task   MyTask_taskB_taskD_command_2019_04_12_6afc23b3fe   has status   PENDING
INFO: Informed scheduler that task   MyTask_taskA_taskC_command_2019_04_12_35a27fe401   has status   PENDING
INFO: Informed scheduler that task   MyTask_taskA_taskB_command_2019_04_12_d66dc54b89   has status   PENDING
INFO: Informed scheduler that task   MyTask__taskA_command_2019_04_12_bdb7812ab5   has status   PENDING
INFO: Done scheduling tasks
INFO: Running Worker with 1 processes
INFO: [pid 35037] Worker Worker(salt=526551035, workers=1, host=ChrisPalmersMBP.localdomain, username=cpalmer, pid=35037) running   MyTask(task_date=2019-04-12, task_name=taskA, task_command=taskA_command, dependent_task_name=)
INFO: [pid 35037] Worker Worker(salt=526551035, workers=1, host=ChrisPalmersMBP.localdomain, username=cpalmer, pid=35037) done      MyTask(task_date=2019-04-12, task_name=taskA, task_command=taskA_command, dependent_task_name=)
INFO: Informed scheduler that task   MyTask__taskA_command_2019_04_12_bdb7812ab5   has status   DONE
INFO: [pid 35037] Worker Worker(salt=526551035, workers=1, host=ChrisPalmersMBP.localdomain, username=cpalmer, pid=35037) running   MyTask(task_date=2019-04-12, task_name=taskB, task_command=taskB command, dependent_task_name=taskA)
INFO: [pid 35037] Worker Worker(salt=526551035, workers=1, host=ChrisPalmersMBP.localdomain, username=cpalmer, pid=35037) done      MyTask(task_date=2019-04-12, task_name=taskB, task_command=taskB command, dependent_task_name=taskA)
INFO: Informed scheduler that task   MyTask_taskA_taskB_command_2019_04_12_d66dc54b89   has status   DONE
INFO: [pid 35037] Worker Worker(salt=526551035, workers=1, host=ChrisPalmersMBP.localdomain, username=cpalmer, pid=35037) running   MyTask(task_date=2019-04-12, task_name=taskD, task_command=taskD command, dependent_task_name=taskB)
INFO: [pid 35037] Worker Worker(salt=526551035, workers=1, host=ChrisPalmersMBP.localdomain, username=cpalmer, pid=35037) done      MyTask(task_date=2019-04-12, task_name=taskD, task_command=taskD command, dependent_task_name=taskB)
INFO: Informed scheduler that task   MyTask_taskB_taskD_command_2019_04_12_6afc23b3fe   has status   DONE
INFO: [pid 35037] Worker Worker(salt=526551035, workers=1, host=ChrisPalmersMBP.localdomain, username=cpalmer, pid=35037) running   MyTask(task_date=2019-04-12, task_name=taskC, task_command=taskC command, dependent_task_name=taskA)
INFO: [pid 35037] Worker Worker(salt=526551035, workers=1, host=ChrisPalmersMBP.localdomain, username=cpalmer, pid=35037) done      MyTask(task_date=2019-04-12, task_name=taskC, task_command=taskC command, dependent_task_name=taskA)
INFO: Informed scheduler that task   MyTask_taskA_taskC_command_2019_04_12_35a27fe401   has status   DONE
INFO: [pid 35037] Worker Worker(salt=526551035, workers=1, host=ChrisPalmersMBP.localdomain, username=cpalmer, pid=35037) running   myWrapperTask(task_date=2019-04-12)
INFO: [pid 35037] Worker Worker(salt=526551035, workers=1, host=ChrisPalmersMBP.localdomain, username=cpalmer, pid=35037) done      myWrapperTask(task_date=2019-04-12)
INFO: Informed scheduler that task   myWrapperTask_2019_04_12_c2195ac5bd   has status   DONE
INFO: Worker Worker(salt=526551035, workers=1, host=ChrisPalmersMBP.localdomain, username=cpalmer, pid=35037) was stopped. Shutting down Keep-Alive thread
INFO:
===== Luigi Execution Summary =====

Scheduled 5 tasks of which:
* 5 ran successfully:
    - 4 MyTask(task_date=2019-04-12, task_name=taskA, task_command=taskA_command, dependent_task_name=) ...
    - 1 myWrapperTask(task_date=2019-04-12)

This progress looks :) because there were no failed tasks or missing dependencies

===== Luigi Execution Summary =====

与您的代码的主要结构差异在于,我的task_list是在任务类之外定义的。您有可能简化了SO的工作,并且cmdList实际上将是另一个任务的输出,并且无法在类外部定义。您可以通过仅在生成后将列表添加到globals()来解决此问题,也可以将完整的命令列表作为参数传递给MyTask / BDX_Task以便可以在{{1 }}(如果列表可能很大,可能不是最好的主意)。另外,就像您最初所做的那样,您不能像我的示例一样使用MyTask.requires()

答案 1 :(得分:1)

我猜这行:
Parameter "task_process_context" with value "None" is not of type string.

向您显示您的某些任务未检索到预期的输出。
在这些情况下,路易吉认为任务没有完成。

确保所有任务返回定义的类型(以下任务中的 )作为输入。
在您的情况下,None破坏了流水线执行,请尝试确保这些任务在失败/没有数据要返回的情况下返回str,而不是None

使用空字符串""或用于保留空依赖项的关键字字符串:"empty"