Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Luigi“调度程序未授予任务运行权限”_Python_Luigi - Fatal编程技术网

Python Luigi“调度程序未授予任务运行权限”

Python Luigi“调度程序未授予任务运行权限”,python,luigi,Python,Luigi,我正在尝试根据cmdList中的属性动态创建Luigi任务,并使前一个任务成为下一个任务的依赖项。SQLTask是Luigi.Task的一个子类。但是,当我运行这段代码时,我会看到这样的进度:|因为有些任务没有被调度程序授予运行权限 我错过了什么 class BDX_Task(SQLTask): acctDate = luigi.Parameter() ssisDate = luigi.Parameter(default=None) queryKey = luigi.Pa

我正在尝试根据cmdList中的属性动态创建Luigi任务,并使前一个任务成为下一个任务的依赖项。SQLTask是Luigi.Task的一个子类。但是,当我运行这段代码时,我会看到这样的进度:|因为有些任务没有被调度程序授予运行权限 我错过了什么

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
我猜是这样的: 值为None的参数task\u process\u上下文不是string类型

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

确保所有任务都返回以下任务中定义的类型作为输入。 在您的情况下,没有任何任务会破坏流水线执行,请尝试确保这些任务在失败/没有数据可返回时返回str,而不是“无”


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

我认为这比需要的更复杂。首先,当直到运行时才知道任务的完整列表时,动态依赖关系非常有用。例如,您可能需要运行一个任务来查询数据库,对于查询返回的每一行,您都需要一个新的依赖项

这与以编程方式创建一组任务及其依赖项截然不同,这就是您在示例中所做的感觉

下面的玩具代码显示了如何实现您的目标:

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 =====

与代码在结构上的主要区别在于,我的任务列表是在任务类之外定义的。有可能您简化了任务,并且您的cmdList实际上是另一个任务的输出,不能在类之外定义。您可以通过在生成后将列表添加到globals来解决这个问题,或者您可以将完整的命令列表作为参数传递给MyTask/BDX_Task,以便它可以在MyTask中引用。如果列表可能很大,可能不是最好的方法。另外,正如您最初所做的,您不能像我的示例那样使用luigi.wrapper任务。

谢谢。我没有按照你的建议改成。not of type string警告现在已消失,但我仍然收到调度程序消息未授予运行权限的任务。Stacktrace已在上面更新。感谢您的详细解释。真的很感激!我如何才能使单个MyTask有自己的名称,即task_name,这样Luigid visualization就不会将所有任务都显示为MyTask,这使得很难判断每个任务的状态。我尝试将yield MyTask更改为yield typetask_name,MyTask,{},并将dependency更改为typedependent_task_name,self._uuclass_u,{},但它给了我一个错误:_pickle.PicklingError:无法pickle:abc上的属性查找BDX022a失败