django-autojob


Namedjango-autojob JSON
Version 1.0.0 PyPI version JSON
download
home_pagehttps://github.com/lmycc/autojob
SummaryDjango customizes management pages based on APScheduler
upload_time2024-08-09 02:08:59
maintainerNone
docs_urlNone
authorzkrliumy
requires_pythonNone
licenseNone
keywords autojob
VCS
bugtrack_url
requirements Django pymysql django-simpleui apscheduler django_redis uwsgi
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # README.md
- [English](https://github.com/lmycc/autojob/blob/main/README.md)
- [简体中文](https://github.com/lmycc/autojob/blob/main/README.zh_CN.md)

# AutoJob

#### AutoJob 是整合了APScheduler和Django的一个定时任务app,只需安装依赖,通过一定配置即可完成定时任务的开发,可通过页面管理定时任务的编辑和状态变更
#### 该app解决了在 Django + uwsgi 部署应用时,启动多个进程会导致定时任务启动冲突的情况
#### 暂只支持`corn`和`date`两种类型,本地需安装redis
#### 该定时任务还适配了simple-ui前端框架

## 安装方式
```
pip install autojob
```
## 使用方式

### 1. 添加 "autojob" 到 `settings.py`的 INSTALLED_APPS 中:
```
INSTALLED_APPS = [
    ...
    'autojob.apps.AutoJob',
]
```

### 2. 执行 `python manage.py migrate autojob` 迁移数据表,下面是添加触发器的方式
#### 两种录入自定义定时任务的方式
- **终端命令方式**
```
## django项目中编写了自定义的定时任务后,可以在终端执行以下命令:
python manage.py scan_jobs

##返回以下信息,即表示成功添加了定时任务触发器到数据表中(重复执行不会导致重复添加):
###检测到新增定时任务:myapp.abc.job_test
```
- **代码调用方式**
```
## 这种方式是在`wsgi.py`文件中增加对command的引用来录入自定义定时任务触发器
from app.management.commands.scan_jobs import Command
scan_jobs = Command()
scan_jobs.handle()
 
##返回以下信息,即表示成功添加了定时任务触发器到数据表中(重复执行不会导致重复添加):
###检测到新增定时任务:myapp.abc.job_test
```

### 3. django应用启动时调用定时任务,在 `wsgi.py`中添加:
```
from autojob import job_tool
job_tool.job_control()
```

### 4. 在 `settings.py`添加redis配置
```
CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/0",
        "OPTIONS": {
            "PICK_VERSION": -1,
            "COMPRESSOR": "django_redis.compressors.zlib.ZlibCompressor",
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "PASSWORD": ""
        }
    }
}
```

### 5. 一个测试任务的demo: `job_test.py`

```
# coding=utf-8
import datetime
import logging

from app.job_tool import job_before

logger = logging.getLogger(__name__)


@job_before
def job_test(*args):
    # 当应用程序启动时,录入任务触发器时会读取下面这行文档当做触发器的描述,如果没有则默认描述是函数的路径
    """一个测试的定时任务"""
    now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    logger.info(now + '__This is a timed task for testing:' + args[0])
```
            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/lmycc/autojob",
    "name": "django-autojob",
    "maintainer": null,
    "docs_url": null,
    "requires_python": null,
    "maintainer_email": null,
    "keywords": "autojob",
    "author": "zkrliumy",
    "author_email": "zkrliumy@163.com",
    "download_url": "https://files.pythonhosted.org/packages/74/93/32de0feea4607f5bb3852c1c63eee4f167ff0f5ec54acdc12e8f799b4ca0/django-autojob-1.0.0.tar.gz",
    "platform": null,
    "description": "# README.md\n- [English](https://github.com/lmycc/autojob/blob/main/README.md)\n- [\u7b80\u4f53\u4e2d\u6587](https://github.com/lmycc/autojob/blob/main/README.zh_CN.md)\n\n# AutoJob\n\n#### AutoJob \u662f\u6574\u5408\u4e86APScheduler\u548cDjango\u7684\u4e00\u4e2a\u5b9a\u65f6\u4efb\u52a1app\uff0c\u53ea\u9700\u5b89\u88c5\u4f9d\u8d56\uff0c\u901a\u8fc7\u4e00\u5b9a\u914d\u7f6e\u5373\u53ef\u5b8c\u6210\u5b9a\u65f6\u4efb\u52a1\u7684\u5f00\u53d1\uff0c\u53ef\u901a\u8fc7\u9875\u9762\u7ba1\u7406\u5b9a\u65f6\u4efb\u52a1\u7684\u7f16\u8f91\u548c\u72b6\u6001\u53d8\u66f4\n#### \u8be5app\u89e3\u51b3\u4e86\u5728 Django + uwsgi \u90e8\u7f72\u5e94\u7528\u65f6\uff0c\u542f\u52a8\u591a\u4e2a\u8fdb\u7a0b\u4f1a\u5bfc\u81f4\u5b9a\u65f6\u4efb\u52a1\u542f\u52a8\u51b2\u7a81\u7684\u60c5\u51b5\n#### \u6682\u53ea\u652f\u6301`corn`\u548c`date`\u4e24\u79cd\u7c7b\u578b\uff0c\u672c\u5730\u9700\u5b89\u88c5redis\n#### \u8be5\u5b9a\u65f6\u4efb\u52a1\u8fd8\u9002\u914d\u4e86simple-ui\u524d\u7aef\u6846\u67b6\n\n## \u5b89\u88c5\u65b9\u5f0f\n```\npip install autojob\n```\n## \u4f7f\u7528\u65b9\u5f0f\n\n### 1. \u6dfb\u52a0 \"autojob\" \u5230 `settings.py`\u7684 INSTALLED_APPS \u4e2d\uff1a\n```\nINSTALLED_APPS = [\n    ...\n    'autojob.apps.AutoJob',\n]\n```\n\n### 2. \u6267\u884c `python manage.py migrate autojob` \u8fc1\u79fb\u6570\u636e\u8868\uff0c\u4e0b\u9762\u662f\u6dfb\u52a0\u89e6\u53d1\u5668\u7684\u65b9\u5f0f\n#### \u4e24\u79cd\u5f55\u5165\u81ea\u5b9a\u4e49\u5b9a\u65f6\u4efb\u52a1\u7684\u65b9\u5f0f\n- **\u7ec8\u7aef\u547d\u4ee4\u65b9\u5f0f**\n```\n## django\u9879\u76ee\u4e2d\u7f16\u5199\u4e86\u81ea\u5b9a\u4e49\u7684\u5b9a\u65f6\u4efb\u52a1\u540e\uff0c\u53ef\u4ee5\u5728\u7ec8\u7aef\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a\npython manage.py scan_jobs\n\n##\u8fd4\u56de\u4ee5\u4e0b\u4fe1\u606f\uff0c\u5373\u8868\u793a\u6210\u529f\u6dfb\u52a0\u4e86\u5b9a\u65f6\u4efb\u52a1\u89e6\u53d1\u5668\u5230\u6570\u636e\u8868\u4e2d\uff08\u91cd\u590d\u6267\u884c\u4e0d\u4f1a\u5bfc\u81f4\u91cd\u590d\u6dfb\u52a0\uff09\uff1a\n###\u68c0\u6d4b\u5230\u65b0\u589e\u5b9a\u65f6\u4efb\u52a1\uff1amyapp.abc.job_test\n```\n- **\u4ee3\u7801\u8c03\u7528\u65b9\u5f0f**\n```\n## \u8fd9\u79cd\u65b9\u5f0f\u662f\u5728`wsgi.py`\u6587\u4ef6\u4e2d\u589e\u52a0\u5bf9command\u7684\u5f15\u7528\u6765\u5f55\u5165\u81ea\u5b9a\u4e49\u5b9a\u65f6\u4efb\u52a1\u89e6\u53d1\u5668\nfrom app.management.commands.scan_jobs import Command\nscan_jobs = Command()\nscan_jobs.handle()\n \n##\u8fd4\u56de\u4ee5\u4e0b\u4fe1\u606f\uff0c\u5373\u8868\u793a\u6210\u529f\u6dfb\u52a0\u4e86\u5b9a\u65f6\u4efb\u52a1\u89e6\u53d1\u5668\u5230\u6570\u636e\u8868\u4e2d\uff08\u91cd\u590d\u6267\u884c\u4e0d\u4f1a\u5bfc\u81f4\u91cd\u590d\u6dfb\u52a0\uff09\uff1a\n###\u68c0\u6d4b\u5230\u65b0\u589e\u5b9a\u65f6\u4efb\u52a1\uff1amyapp.abc.job_test\n```\n\n### 3. django\u5e94\u7528\u542f\u52a8\u65f6\u8c03\u7528\u5b9a\u65f6\u4efb\u52a1\uff0c\u5728 `wsgi.py`\u4e2d\u6dfb\u52a0\uff1a\n```\nfrom autojob import job_tool\njob_tool.job_control()\n```\n\n### 4. \u5728 `settings.py`\u6dfb\u52a0redis\u914d\u7f6e\n```\nCACHES = {\n    \"default\": {\n        \"BACKEND\": \"django_redis.cache.RedisCache\",\n        \"LOCATION\": \"redis://127.0.0.1:6379/0\",\n        \"OPTIONS\": {\n            \"PICK_VERSION\": -1,\n            \"COMPRESSOR\": \"django_redis.compressors.zlib.ZlibCompressor\",\n            \"CLIENT_CLASS\": \"django_redis.client.DefaultClient\",\n            \"PASSWORD\": \"\"\n        }\n    }\n}\n```\n\n### 5. \u4e00\u4e2a\u6d4b\u8bd5\u4efb\u52a1\u7684demo\uff1a `job_test.py`\n\n```\n# coding=utf-8\nimport datetime\nimport logging\n\nfrom app.job_tool import job_before\n\nlogger = logging.getLogger(__name__)\n\n\n@job_before\ndef job_test(*args):\n    # \u5f53\u5e94\u7528\u7a0b\u5e8f\u542f\u52a8\u65f6\uff0c\u5f55\u5165\u4efb\u52a1\u89e6\u53d1\u5668\u65f6\u4f1a\u8bfb\u53d6\u4e0b\u9762\u8fd9\u884c\u6587\u6863\u5f53\u505a\u89e6\u53d1\u5668\u7684\u63cf\u8ff0\uff0c\u5982\u679c\u6ca1\u6709\u5219\u9ed8\u8ba4\u63cf\u8ff0\u662f\u51fd\u6570\u7684\u8def\u5f84\n    \"\"\"\u4e00\u4e2a\u6d4b\u8bd5\u7684\u5b9a\u65f6\u4efb\u52a1\"\"\"\n    now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')\n    logger.info(now + '__This is a timed task for testing:' + args[0])\n```",
    "bugtrack_url": null,
    "license": null,
    "summary": "Django customizes management pages based on APScheduler",
    "version": "1.0.0",
    "project_urls": {
        "Homepage": "https://github.com/lmycc/autojob"
    },
    "split_keywords": [
        "autojob"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "749332de0feea4607f5bb3852c1c63eee4f167ff0f5ec54acdc12e8f799b4ca0",
                "md5": "d6c29fdb1b216658727732440a1d3a64",
                "sha256": "0b1be937b958f91e591d9f048b84fcd4ae6bafd3fd454d2e1f35798ad9aa5bf8"
            },
            "downloads": -1,
            "filename": "django-autojob-1.0.0.tar.gz",
            "has_sig": false,
            "md5_digest": "d6c29fdb1b216658727732440a1d3a64",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 10511,
            "upload_time": "2024-08-09T02:08:59",
            "upload_time_iso_8601": "2024-08-09T02:08:59.986827Z",
            "url": "https://files.pythonhosted.org/packages/74/93/32de0feea4607f5bb3852c1c63eee4f167ff0f5ec54acdc12e8f799b4ca0/django-autojob-1.0.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-08-09 02:08:59",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "lmycc",
    "github_project": "autojob",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [
        {
            "name": "Django",
            "specs": [
                [
                    "==",
                    "3.2.13"
                ]
            ]
        },
        {
            "name": "pymysql",
            "specs": [
                [
                    "==",
                    "1.0.2"
                ]
            ]
        },
        {
            "name": "django-simpleui",
            "specs": [
                [
                    "==",
                    "2022.4.9"
                ]
            ]
        },
        {
            "name": "apscheduler",
            "specs": [
                [
                    "==",
                    "3.9.1"
                ]
            ]
        },
        {
            "name": "django_redis",
            "specs": [
                [
                    "==",
                    "5.2.0"
                ]
            ]
        },
        {
            "name": "uwsgi",
            "specs": [
                [
                    "==",
                    "2.0.20"
                ]
            ]
        }
    ],
    "lcname": "django-autojob"
}
        
Elapsed time: 0.91096s