Ich habe eine schöne gerade Arbeitsrohr, wo die Aufgabe, die ich über Luigi auf der Befehlszeile ausführen löst alle erforderlichen Upstream-Daten holen und verarbeiten in seiner richtigen Reihenfolge bis es tröpfelt in meine Datenbank.Luigi Upstream-Task sollte einmal ausgeführt werden, um Eingabe für Satz von nachgelagerten Aufgaben zu erstellen
class IMAP_Fetch(luigi.Task):
"""fetch a bunch of email messages with data in them"""
date = luigi.DateParameter()
uid = luigi.Parameter()
…
def output(self):
loc = os.path.join(self.data_drop, str(self.date))
# target for requested message
yield LocalTarget(os.path.join(loc, uid+".msg"))
def run(self):
# code to connect to IMAP server and run FETCH on given UID
# message gets written to self.output()
…
class RecordData(luigi.contrib.postgres.CopyToTable):
"""copy the data in one email message to the database table"""
uid = luigi.Parameter()
date = luigi.DateParameter()
table = 'msg_data'
columns = [(id, int), …]
def requires(self):
# a task (not shown) that extracts data from one message
# which in turn requires the IMAP_Fetch to pull down the message
return MsgData(self.date, self.uid)
def rows(self):
# code to read self.input() and yield lists of data values
Tolle Sachen. Unglücklicherweise spricht der erste Datenabruf mit einem entfernten IMAP-Server und jeder Abruf ist eine neue Verbindung und eine neue Abfrage: sehr langsam. Ich weiß, wie man alle einzelnen Nachrichtendateien in einer Sitzung (Aufgabeninstanz) bekommt. Ich verstehe nicht, wie ich die nachgelagerten Aufgaben so behalte, wie sie sind, indem ich jeweils eine Nachricht bearbeite, da die Aufgabe, die eine Nachricht benötigt, nur diese eine Nachricht auslöst, und nicht alle verfügbaren Nachrichten abruft. Ich entschuldige mich im Voraus für die fehlenden offensichtlichen Lösungen, aber es hat mich soweit verblüfft, wie ich meine nette, einfache, blöde Pfeife größtenteils so halten kann, wie es ist, aber den Trichter an der Spitze in einem Anruf alle Daten einsaugen zu lassen. Danke für Ihre Hilfe.
Bitte fügen Sie einen Code, der zeigt, was Ihre Aufgaben tun und wie so können wir Ihnen helfen – matagus
aktualisiert meinen ursprünglichen Beitrag wie angefordert – ib4u