Python Luigi可以传播异常或返回任何结果吗?

Python Luigi可以传播异常或返回任何结果吗?,python,luigi,Python,Luigi,我正在使用Luigi启动一些管道。 让我们用一个简单的例子< /P> task = myTask() w = Worker(scheduler=CentralPlannerScheduler(), worker_processes=1) w.add(task) w.run() 现在让我们假设myTask在执行期间引发异常。我所能得到的只是luigi的日志,其中显示了异常 luigi是否有任何方法可以传播它或至少返回一个故障状态 然后我就可以让我的程序在那个状态下做出反应 谢谢 编辑 我忘记了在

我正在使用Luigi启动一些管道。 让我们用一个简单的例子< /P>
task = myTask()
w = Worker(scheduler=CentralPlannerScheduler(), worker_processes=1)
w.add(task)
w.run()
现在让我们假设
myTask
在执行期间引发异常。我所能得到的只是luigi的日志,其中显示了异常

luigi是否有任何方法可以传播它或至少返回一个
故障
状态

然后我就可以让我的程序在那个状态下做出反应

谢谢

编辑
我忘记了在存储结果时指定luigi的输出是以数据库为目标的。如果引发异常,则不会存储任何结果,但不会将异常传播到luigi。我想知道luigi是否有这样的选项。

您可以做的是在文件中写入错误。例如,在可能失败的任务中(我们称之为TaskA):

然后,在依赖于该错误的任务中,该任务将需要TaskA。你可以这样做:

with open('errorfile.log','r') as f:
    if f.read()://if anything is in the error log from TaskA
        //error occurred
        do stuff
    else:
        do other stuff
发件人:

Luigi有一个内置的事件系统,允许您注册对事件的回调,并从您自己的任务中触发它们。您既可以钩住一些预定义的事件,也可以创建自己的事件。每个事件句柄都绑定到一个任务类,并且只能从该类或其子类触发。这使您可以轻松地仅从特定类订阅事件(例如hadoop作业)

例如:

import luigi

from my_tasks import MyTask


@MyTask.event_handler(luigi.Event.FAILURE)
def mourn_failure(task, exception):
    """Will be called directly after a failed execution
    of `run` on any MyTask subclass
    """

    do_something()


luigi.run()

路易吉有一个朋友。您还可以查看,以了解如何侦听和响应其他事件。

传播它或返回故障状态是什么意思?在程序失败的任何地方,都可以放入try-except子句,然后可以使用except子句写入luigi输出。很抱歉,你的评论让我意识到我需要更具体地说明我使用luigi和输出的方式。我正在编辑。添加更新版本的luigi handle现在可以处理更多事件。处理任务过程中的错误变得更容易了。
import luigi

from my_tasks import MyTask


@MyTask.event_handler(luigi.Event.FAILURE)
def mourn_failure(task, exception):
    """Will be called directly after a failed execution
    of `run` on any MyTask subclass
    """

    do_something()


luigi.run()