# snail-job-python **Repository Path**: wysqg/snail-job-python ## Basic Information - **Project Name**: snail-job-python - **Description**: 🔥🔥🔥 灵活,可靠和快速的分布式任务重试和分布式任务调度平台 - **Primary Language**: Python - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: https://snailjob.opensnail.com/ - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 8 - **Created**: 2024-08-28 - **Last Updated**: 2024-08-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # py-snail-job ## 介绍 snail-job 项目的 python 客户端,当前版本基于服务器版本`master`分支开发。 [snail-job项目 java 后端](https://gitee.com/aizuda/snail-job) ## 基础知识 ### 服务器 <-> 交互 ![ProcessOn 流程图](./doc/processon.png "ProcessOn 流程图") #### 基础交互数据 ##### HTTP 头部 ```ini host-id: SNAIL_HOST_ID # 客户端ID host-ip: SNAIL_HOST_IP # 客户端IP,服务器下发消息用到 host-port: SNAIL_HOST_PORT # 客户端PORT,服务器下发消息用到 namespace: SNAIL_NAMESPACE # 客户端归属 命名空间 group-name: SNAIL_GROUP_NAME # 客户端归属 组名称 token: SNAIL_TOKEN # 通讯校验 token ``` ##### 交互数据模式 (schema), 计划使用 pydantic 来封装、验证 具体参考 `schema.py` ```json { "reqId":36, "args": [] } ``` ## 初始化数据 ```sql -- 添加 组配置 snail_job_demo_group, SJ_Wyz3dmsdbDOkDujOTSSoBjGQP1BMsVnj INSERT INTO `sj_group_config` (`group_name`, `description`, `token`, `group_status`, `version`, `group_partition`, `id_generator_mode`, `init_scene`, `bucket_index`) VALUES ('snail_job_demo_group', '', 'SJ_Wyz3dmsdbDOkDujOTSSoBjGQP1BMsVnj', 1, 1, 0, 2, 1, 119); -- 添加测试定时任务 INSERT INTO `sj_job` (`group_name`, `job_name`, `args_str`, `args_type`, `next_trigger_at`, `job_status`, `task_type`, `route_key`, `executor_type`, `executor_info`, `trigger_type`, `trigger_interval`, `block_strategy`, `executor_timeout`, `max_retry_times`, `parallel_num`, `retry_interval`, `bucket_index`, `resident`, `description`, `ext_attrs`, `deleted`) VALUES ('snail_job_demo_group', 'test', '', 1, 1719328740283, 1, 1, 4, 1, 'testJobExecutor', 2, '60', 1, 60, 3, 1, 1, 61, 0, '', '', 0); ``` ## 开始调试 ```shell # 复制 `.env.example` 为 `.env` cp .env.example .env # windows命令为 copy # 创建虚拟环境 python -m venv venv # 安装依赖 pip install -r requirements.txt # 启动程序 python main.py ``` 登录后台,能看到对应host-id 为 `py-xxxxxx` 的客户端 ## 任务 - [x] 实现工具类对本地任务进行注册,类似 Java 的注解及扫描 - [x] 如果管理正在运行的任务,特别是终止,以为着需要一个全局容器来管理正在运行的任务 - [x] 任务执行线程池 - [x] 执行结果上报 - [x] `logging` 封装,实现`SnailHttpHandler`上报日志 - [x] `SnailLog.LOCAL`, `SnailLog.REMOTE`,添加`handler`,让其同时打印日志到`console`及文件 - [ ] 需要修改服务器,添加执行器类型`python` - [ ] pythonic 项目工程化,`pytest`,python 包管理