diff options
Diffstat (limited to '1 Projects/Resumable tasks goba/Prototype resumable task.md')
-rw-r--r-- | 1 Projects/Resumable tasks goba/Prototype resumable task.md | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/1 Projects/Resumable tasks goba/Prototype resumable task.md b/1 Projects/Resumable tasks goba/Prototype resumable task.md new file mode 100644 index 0000000..fb58a4e --- /dev/null +++ b/1 Projects/Resumable tasks goba/Prototype resumable task.md @@ -0,0 +1,62 @@ +--- +tags: + - taskflow + - "#openstack" +--- +```python +import time +import contextlib + +from taskflow.patterns import linear_flow as lf +from taskflow import task, engines +from taskflow.persistence import backends, models +from taskflow.exceptions import NotFound + + +class PrintAndWait(task.Task): + def execute(self, *args, **kwargs): + print(self.name) + time.sleep(10) + return self.name + + +def logbook_and_flow_detail(backend, id): + conn = backend.get_connection() + + try: + logbook = conn.get_logbook(id) + flow_detail = logbook.find(id) + except NotFound: + logbook = models.LogBook("printer_log", uuid=id) + flow_detail = models.FlowDetail("cool flow", uuid=id) + logbook.add(flow_detail) + + with contextlib.closing(backend.get_connection()) as conn: + conn.upgrade() + conn.save_logbook(logbook) + + return logbook, flow_detail + + +def create_flow(): + main_flow = lf.Flow("main_flow") + + for i in range(10): + main_flow.add(PrintAndWait(name=f"print_n_wait_{i}")) + + return main_flow + + +def main(): + backend = backends.fetch(conf=dict(connection="sqlite:///test.db")) + logbook, flow_detail = logbook_and_flow_detail(backend, "1") + + flow = create_flow() + eng = engines.load(flow, flow_detail=flow_detail, backend=backend, book=logbook) + + eng.run() + + +if __name__ == "__main__": + main() +```
\ No newline at end of file |