2016-09-14 20 views
5

Tôi đang cố gắng để nắm bắt cách luigi hoạt động, và tôi nhận được ý tưởng, nhưng thực hiện thực tế là một chút khó khăn hơn;) Đây là những gì tôi có:Làm thế nào để xử lý đầu ra với Luigi

class MyTask(luigi.Task): 

    x = luigi.IntParameter() 

    def requires(self): 
     return OtherTask(self.x) 

    def run(self): 
     print(self.x) 

class OtherTask(luigi.Task): 

    x = luigi.IntParameter() 

    def run(self): 
     y = self.x + 1 
     print(y) 

Và điều này không với RuntimeError: Unfulfilled dependency at run time: OtherTask_3_5862334ee2. Tôi đã figured rằng tôi cần phải sản xuất đầu ra bằng cách sử dụng def output(self): để workaround vấn đề này \ tính năng. Và tôi không thể hiểu làm cách nào để tạo ra sản lượng hợp lý mà không cần phải viết vào một tệp, ví dụ:

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

def run(self): 

    words = [ 
      'apple', 
      'banana', 
      'grapefruit' 
      ] 

    with self.output().open('w') as f: 
     for word in words: 
      f.write('{word}\n'.format(word=word)) 

Tôi đã thử đọc tài liệu, nhưng tôi không hiểu khái niệm đằng sau đầu ra. Điều gì sẽ xảy ra nếu tôi chỉ cần xuất ra màn hình. Điều gì sẽ xảy ra nếu tôi cần xuất một đối tượng sang tác vụ khác? Cảm ơn!

+0

Bạn có một loạt câu hỏi được trộn lẫn ở đây, nhưng chỉ có một câu hỏi có dấu chấm hỏi. – MattMcKnight

Trả lời

6

Điều gì sẽ xảy ra nếu tôi cần xuất đối tượng cho một tác vụ khác?

Tác vụ Luigi có thể chạy trong các quy trình khác nhau. Do đó, bạn thường phải ghi vào đĩa, cơ sở dữ liệu, dưa hoặc một số cơ chế bên ngoài cho phép trao đổi dữ liệu giữa các quy trình (và sự tồn tại của các quy trình đó) nếu bạn muốn trao đổi một đối tượng là kết quả của một nhiệm vụ. Ngược lại với việc viết phương thức output(), nó đòi hỏi một đích, bạn cũng có thể ghi đè lên phương thức complete(), nơi bạn có thể viết bất kỳ logic tùy chỉnh nào cho phép các nhiệm vụ được xem xét hoàn chỉnh.

+0

Ok, có vẻ công bằng, bạn có thể chỉ cho tôi một số ví dụ không? Tôi bắt đầu nghi ngờ rằng tôi có thể ghi đè lên phương pháp hoàn chỉnh, nhưng tôi đã không thể tìm thấy bất cứ điều gì có liên quan về chủ đề này. Cảm ơn! – 4c74356b41

+0

Ok, có vẻ như quay trở lại sự thật là đủ. cảm ơn! – 4c74356b41

+0

có, trả về true khi mọi thứ được thực hiện là tất cả những gì bạn phải làm để ghi đè hoàn thành(). hành vi cơ bản của complete() là kiểm tra sự tồn tại của Target được trả về bởi output() – MattMcKnight

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