From ed9a0be0bde64dff2a8c7dbd3596035a441af892 Mon Sep 17 00:00:00 2001 From: 100gle <569590461@qq.com> Date: Thu, 9 Mar 2023 09:44:25 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E6=8A=80=E8=83=BD?= =?UTF-8?q?=E6=89=A9=E5=B1=95N16=E4=B8=80=E7=AB=A0=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E7=A4=BA=E4=BE=8B=E6=BA=90=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/newsletter/N16/01_quickstart.py | 15 +++++++++ code/newsletter/N16/02_session.py | 25 ++++++++++++++ code/newsletter/N16/03_pipelining.py | 20 ++++++++++++ code/newsletter/N16/04_configuration.py | 21 ++++++++++++ code/newsletter/N16/05_grouper.py | 43 +++++++++++++++++++++++++ 5 files changed, 124 insertions(+) create mode 100644 code/newsletter/N16/01_quickstart.py create mode 100644 code/newsletter/N16/02_session.py create mode 100644 code/newsletter/N16/03_pipelining.py create mode 100644 code/newsletter/N16/04_configuration.py create mode 100644 code/newsletter/N16/05_grouper.py diff --git a/code/newsletter/N16/01_quickstart.py b/code/newsletter/N16/01_quickstart.py new file mode 100644 index 0000000..fbd17ab --- /dev/null +++ b/code/newsletter/N16/01_quickstart.py @@ -0,0 +1,15 @@ +from rocketry import Rocketry + +app = Rocketry(execution="main") +times = 0 + + +@app.task('every 1 second') +def echo(): + global times + times += 1 + print(f"Running {times} times...") + + +if __name__ == '__main__': + app.run() diff --git a/code/newsletter/N16/02_session.py b/code/newsletter/N16/02_session.py new file mode 100644 index 0000000..a70be7a --- /dev/null +++ b/code/newsletter/N16/02_session.py @@ -0,0 +1,25 @@ +from rocketry import Rocketry + +app = Rocketry() + + +def get_params(): + yield {"name": "100gle"} + yield {} + + +@app.task() +def greet(name=None): + msg = name or "world" + print(f"Hello, {msg}!") + + +@app.task('every 3 second', execution="thread") +def do_callback(): + for params in get_params(): + task = app.session["greet"] + task.run(**params) + + +if __name__ == '__main__': + app.run() diff --git a/code/newsletter/N16/03_pipelining.py b/code/newsletter/N16/03_pipelining.py new file mode 100644 index 0000000..53fa7d1 --- /dev/null +++ b/code/newsletter/N16/03_pipelining.py @@ -0,0 +1,20 @@ +from rocketry import Rocketry +from rocketry.args import Return +from rocketry.conds import after_success + +app = Rocketry(execution="async") + + +@app.task('every 3 second') +def success(): + return True + + +@app.task(after_success(success)) +def handle(is_success=Return(success)): + status = "Done" if is_success else "Running" + print(f"Task status is: {status}") + + +if __name__ == '__main__': + app.run() diff --git a/code/newsletter/N16/04_configuration.py b/code/newsletter/N16/04_configuration.py new file mode 100644 index 0000000..448b24c --- /dev/null +++ b/code/newsletter/N16/04_configuration.py @@ -0,0 +1,21 @@ +from redbird.repos import CSVFileRepo +from rocketry import Rocketry +from rocketry.log import LogRecord + +app = Rocketry( + execution="async", + logger_repo=CSVFileRepo( + filename="task_log.csv", + model=LogRecord, + ), + config={ + 'task_pre_exist': 'raise', + 'force_status_from_logs': True, + 'silence_task_prerun': False, + 'silence_task_logging': False, + 'silence_cond_check': False, + 'max_process_count': 5, + 'restarting': 'replace', + 'cycle_sleep': 0.1, + }, +) diff --git a/code/newsletter/N16/05_grouper.py b/code/newsletter/N16/05_grouper.py new file mode 100644 index 0000000..16cb657 --- /dev/null +++ b/code/newsletter/N16/05_grouper.py @@ -0,0 +1,43 @@ +from rocketry import Grouper, Rocketry +from rocketry.args import Arg + +app = Rocketry() + +# ----------- +# Daily Tasks +# ----------- +daily_group = Grouper() + + +@daily_group.param("daily_signal") +def signal(): + return "Bang!" + + +@daily_group.task("daily") +def postit(signal=Arg("daily_signal")): + ... + + +# ------------ +# Weekly Tasks +# ------------ + +weekly_group = Grouper() + + +@weekly_group.param("weekly_signal") +def signal(): + return "weekly" + + +@weekly_group.task("weekly") +def backup(signal=Arg("weekly_signal")): + ... + + +app.include_grouper(daily_group) +app.include_grouper(weekly_group) + +if __name__ == '__main__': + app.run()