Python Luigi – 满意时继续执行外部任务
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python Luigi – 满意时继续执行外部任务,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2435字,纯文字阅读大概需要4分钟。
内容图文
![Python Luigi – 满意时继续执行外部任务](/upload/InfoBanner/zyjiaocheng/788/eb054237d90f43f28b520630d5ad35a9.jpg)
我正在研究一个Luigi管道,它检查是否存在手动创建的文件,如果存在,继续执行下一个任务:
import luigi, os
class ExternalFileChecker(luigi.ExternalTask):
task_namespace='MyTask'
path = luigi.Parameter()
def output(self):
return luigi.LocalTarget(os.path.join(self.path, 'externalfile.txt'))
class ProcessExternalFile(luigi.Task):
task_namespace='MyTask'
path = luigi.Parameter()
def requires(self):
return ExternalFileChecker(path=self.path)
def output(self):
dirname = self.path
outfile = os.path.join(dirname, 'processedfile.txt')
return luigi.LocalTarget(outfile)
def run(self):
#do processing
if __name__ == '__main__':
path = r'D:\MyPath\luigi'
luigi.run(['MyTask.ProcessExternalFile','--path', path, '--worker-retry-external-tasks','--scheduler-retry-delay', '20', '--worker-keep-alive'])
我想要的是,在创建手册文件并将其粘贴到路径中后,luigi继续.当我这样做时,它不是找到文件并继续执行任务,而是每隔几秒重新检查一个新任务:
DEBUG: There are no more tasks to run at this time
DEBUG: There are 2 pending tasks possibly being run by other workers
DEBUG: There are 2 pending tasks unique to this worker
DEBUG: Sleeping for 1.536391 seconds
DEBUG: Asking scheduler for work...
DEBUG: Done
DEBUG: There are no more tasks to run at this time
DEBUG: There are 2 pending tasks possibly being run by other workers
DEBUG: There are 2 pending tasks unique to this worker
DEBUG: Sleeping for 5.669132 seconds
DEBUG: Asking scheduler for work...
DEBUG: Done
(...)
经过相当长的时间(15-20分钟左右),luigi将找到该文件,然后它可以按照需要继续.我该怎么做才能防止这种延迟?我希望luigi在文件存在后立即继续.
解决方法:
要记住以下几点:
> Luigi工作线程将不会退出,直到至少有一个任务在运行(或者如果keep_alive = True,在这种情况下,当没有更多待处理任务时它将退出).
>失败的任务有重试逻辑,默认重试间隔为15分钟.
>重试逻辑的工作原理如下.在指定的重试间隔后,调度程序将忘记任务的失败(与单击UI中的“原谅失败”按钮相同),并将任务的状态更改为挂起.下一次工作人员要求调度程序工作时,可以将此任务分配给工作人员.
>不完整的外部任务计为FAILED,受重试逻辑限制.
>外部任务的重试行为由[worker]部分中的retry_external_tasks配置设置控制.
我认为你所观察到的是这样的.您的管道正在运行,任务ProcessExternalFile失败,然后您添加文件,任务在retry_delay期间保持FAILED,然后最终它变为PENDING并且工作人员再次被赋予此任务,此时它发现文件和任务变得完整.
这是否是您期望的行为取决于您.如果希望更快地找到该文件,则可以更改重试间隔.或者你可以在run方法中进行无限循环,并定期检查文件,并在找到时跳出循环.您还可以将Luigi配置为完全禁用重试逻辑.
内容总结
以上是互联网集市为您收集整理的Python Luigi – 满意时继续执行外部任务全部内容,希望文章能够帮你解决Python Luigi – 满意时继续执行外部任务所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。