2017-03-30 15 views
5

Tôi đang cố gắng học một cách rất đơn giản cách luigi hoạt động. Cũng giống như một newbie tôi đã đưa ra với mã nàyLuigi - Unfulfilled% s tại thời gian chạy

import luigi 

class class1(luigi.Task): 

    def requires(self): 
    return class2() 

    def output(self): 
    return luigi.LocalTarget('class1.txt') 

def run(self): 
    print 'IN class A' 


class class2(luigi.Task): 

    def requires(self): 
    return [] 

    def output(self): 
    return luigi.LocalTarget('class2.txt') 


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

Chạy này trong cửa sổ lệnh cho lỗi nói

raise RuntimeError('Unfulfilled %s at run time: %s' % (deps, ',  
+0

bạn đang sử dụng lệnh nào để chạy? các phương thức 'run()' của bạn cần tạo các tệp đầu ra được tham chiếu trong 'LocalTarget' để các phụ thuộc được đáp ứng. – MattMcKnight

Trả lời

6

Điều này xảy ra bởi vì bạn xác định một đầu ra cho class2 nhưng không bao giờ tạo ra nó.

Hãy phá vỡ nó xuống ...

Khi chạy

python file.py class2 --local-scheduler 

luigi sẽ hỏi:

  • là sản phẩm của class2 đã có trên đĩa? NO
  • phụ thuộc séc của class2: NONE
  • thực hiện run phương pháp (theo mặc định nó và phương pháp rỗng pass)
  • chạy phương pháp không trở về sai sót, vì vậy công việc kết thúc thành công.

Tuy nhiên, khi chạy

python file.py class1 --local-scheduler 

luigi sẽ:

  • là sản phẩm của class1 đã có trên đĩa? NO
  • kiểm tra nhiệm vụ phụ thuộc: YES: class2
  • tạm dừng để kiểm tra tình trạng của class2
    • là sản phẩm của class2 trên đĩa? NO
    • chạy class2 ->chạy -> thực hiện mà không có lỗi
    • là sản phẩm của class2 trên đĩa? NO -> nâng lỗi

luigi không bao giờ chạy một nhiệm vụ trừ khi tất cả các phụ thuộc trước đây của nó được đáp ứng. (tức là đầu ra của họ có trên hệ thống tệp)

Các vấn đề liên quan