# python-job-controller **Repository Path**: r_o_o_t/python_job_controller ## Basic Information - **Project Name**: python-job-controller - **Description**: 任务控制器 - **Primary Language**: Python - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2021-09-01 - **Last Updated**: 2022-03-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # `python-job-controller` ## 类设计 ```mermaid classDiagram class Job { +job_id +func_name +func_args +func_kwargs +sched_times +max_sched_times +next_run_time +create_time +update_time +delete_time } class StorageABC{ <> +add_job(job~Job~) bool +remove_job(job_id~string~) bool +update_job(job~Job~) bool +remove_all() bool +lookup_job(job_id~string~) job~Job~ +get_due_jobs(from_timestamp~int~) List~Job~ +get_next_run_time() int +lock_jobs(List~Job~) } class MongoDBStorage class JobController{ -max_workers int -avai_workers int -min_fetch_cnt int -per_job_running_duration int -store StrorageABC -process_jobs_lock LockABC -_handlers Dict +add_job(job~Job~) +update_job(job~Job~) +start() +register(func_name~string~, func~object~) -process_jobs() int -worker() None -launch_workers() -get_wait_seconds() int -main_loop() -add_local_job() -remove_local_job() -wakeup() } class LockABC{ <> +__init__(self, resource~str~) None +acquire() bool +release() bool } class LocalLock MongoDBStorage ..> Job: dependency StorageABC ..> Job: dependency JobController ..> Job: dependency JobController ..> LockABC: dependency JobController ..> StorageABC: dependency StorageABC --|> MongoDBStorage: inheritance LockABC --|> LocalLock: inheritance ``` 类交互时序图 ```mermaid sequenceDiagram participant a as JobController.start() participant b as JobController._launch_workers() participant c as JobController._main_loop() participant d as JobController._process_jobs() participant e as JobController._get_wait_seconds() participant f as TaskQueue participant g as workers a ->> b: call a ->> c: star in background c ->> c: set wait_seconds to 0 loop Every wait_seconds c ->> d: call d ->> f: put jobs c ->> e: call e ->> c: set wait_seconds to seconds end loop forever g ->> f: get_job g ->> g: execute_job end ```