luigi任务去了哪里?

ffx8fchx  于 2021-05-30  发布在  Hadoop
关注(0)|答案(1)|浏览(382)

第一次进入luigi(和python!)还有一些问题。相关代码为:

  1. from Database import Database
  2. import luigi
  3. class bbSanityCheck(luigi.Task):
  4. conn = luigi.Parameter()
  5. date = luigi.Parameter()
  6. def __init__(self, *args,**kwargs):
  7. super(bbSanityCheck, self).__init__(*args,**kwargs)
  8. self.has_run = False
  9. def run(self):
  10. print "Entering run of bb sanity check"
  11. # DB STUFF HERE THAT DOESN"T MATTER
  12. print "Are we in la-la land?"
  13. def complete(self):
  14. print "BB Sanity check being asked for completeness: " , self.has_run
  15. return self.has_run
  16. class Pipeline(luigi.Task):
  17. date = luigi.DateParameter()
  18. def requires(self):
  19. db = Database('cbs')
  20. self.conn = db.connect()
  21. print "I'm about to yield!"
  22. return bbSanityCheck(conn = self.conn, date = self.date)
  23. def run(self):
  24. print "Hello World"
  25. self.conn.query("""SELECT *
  26. FROM log_blackbook""")
  27. result = conn.store_result()
  28. print result.fetch_row()
  29. def complete(self):
  30. return False
  31. if __name__=='__main__':
  32. luigi.run()

输出在这里(删除了相关的db返回,原因是):

  1. DEBUG: Checking if Pipeline(date=2013-03-03) is complete
  2. I'm about to yield!
  3. INFO: Scheduled Pipeline(date=2013-03-03)
  4. I'm about to yield!
  5. DEBUG: Checking if bbSanityCheck(conn=<_mysql.connection open to 'sas1.rad.wc.truecarcorp.com' at 223f050>, date=2013-03-03) is complete
  6. BB Sanity check being asked for completeness: False
  7. INFO: Scheduled bbSanityCheck(conn=<_mysql.connection open to 'sas1.rad.wc.truecarcorp.com' at 223f050>, date=2013-03-03)
  8. INFO: Done scheduling tasks
  9. DEBUG: Asking scheduler for work...
  10. DEBUG: Pending tasks: 2
  11. INFO: [pid 5150] Running bbSanityCheck(conn=<_mysql.connection open to 'sas1.rad.wc.truecarcorp.com' at 223f050>, date=2013-03-03)
  12. Entering run of bb sanity check
  13. Are we in la-la land?
  14. INFO: [pid 5150] Done bbSanityCheck(conn=<_mysql.connection open to 'sas1.rad.wc.truecarcorp.com' at 223f050>, date=2013-03-03)
  15. DEBUG: Asking scheduler for work...
  16. INFO: Done
  17. INFO: There are no more tasks to run at this time
  18. INFO: There are 1 pending tasks possibly being run by other workers
  19. INFO: Worker was stopped. Shutting down Keep-Alive thread

所以问题是:
1.)为什么“我要屈服”会被打印两次?
2.)为什么“你好世界”从未被印刷?
3.)什么是“1个可能由其他工作人员运行的挂起任务”?
我更喜欢超净输出,因为它更容易维护。我希望我能解决这些问题。
我还注意到需要“yield”或“returnitem,item2,item3”。我读过关于屈服的书,并且理解它。我不明白的是哪种习惯在这里被认为是优越的,或者他们之间的细微差别是我对这门语言还不熟悉的。

mbyulnm0

mbyulnm01#

我想你误解了路易吉的工作原理。
(1) 嗯。。我不确定。在我看来,这更像是在信息和调试中打印相同内容的问题
(2) 所以,你尝试运行依赖于bbsanitycheck运行的管道。complete()永远不会返回true,因为您从未在bbsanitycheck中将has\u run设置为true。因此管道任务永远不能运行和输出helloworld,因为它的依赖关系永远不会完成。
(3) 这可能是因为您有一个挂起的任务(实际上是管道)。但路易吉明白,它是不可能运行和关闭。
我个人不会使用has\u run作为检查任务是否已运行的方法,而是检查此作业的结果是否存在。也就是说,如果这个作业对数据库做了什么,那么complete()应该检查预期的内容是否存在。

相关问题