簡體   English   中英

使用Luigi管道時組織文件?

[英]Organizing files when using Luigi pipeline?

我在工作流程中使用Luigi。 我的工作流程分為三個常規部分-導入,分析和導出。 在每個部分中,都有多個Luigi任務。

我可以將所有內容放在一個文件中。 但是,如果我想將所有內容分開,例如具有data_import.pyanalysis.pyexport.py

例如,如果data_import.py看起來像:

import luigi

class import_task_A(luigi.Task):
    def requires(self):
        return []
    def output(self):
        return luigi.LocalTarget('myfile.txt')
    def run(self):
        my import stuff

if __name__ == '__main__':
    luigi.run()

但是,如果export.py中的任務取決於import.py中的任務怎么辦。 我會做:

from data_import import import_task_A
import luigi

class export_task_A(luigi.Task):
    def requires(self):
        return import_task_A()
    def output(self):
        return luigi.LocalTarget('myfile.txt')
    def run(self):
        my import stuff

if __name__ == '__main__':
    luigi.run()

如果我將較大的項目分解為多個.py文件,那么告訴Luigi哪個文件中需要執行哪些任務的最佳方法是什么? 好像這種方法會很麻煩。

為什么會變得麻煩? 如果您的export_task_A依賴於許多任務,那么您的def要求將變為:

def requires(self):
    return [import_task_A(), import_task_B()]

在這種情況下,您可能要刪除

if __name__ == '__main__':
    luigi.run()

從您的data_import.py。 也可以代替data_export.py中的用法

if __name__ == '__main__':
    luigi.build([export_task_A()])

不確定是否有解決方法。 您要么需要包含多個文件,要么需要在一個文件中包含多個類。 您希望如何組織項目是一個優先事項。

您可以做的一件事就是限制導入位置的數量,就是讓一個python文件導入所需的所有Luigi類

# my_tasks.py
from data_import import import_task_A
from export import export_task_A

然后,在其他文件中,您可以從my_tasks導入所需的任何內容。 還可以考慮使用getattrimportlib在導入和訪問類上提供更多靈活性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM