" name="sm-site-verification"/>
侧边栏壁纸
博主头像
PySuper 博主等级

千里之行,始于足下

  • 累计撰写 206 篇文章
  • 累计创建 14 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录
Web

实践:Crontab、Celery 分布式 异步

PySuper
2021-06-28 / 0 评论 / 0 点赞 / 47 阅读 / 0 字
温馨提示:
本文最后更新于2024-05-28,若内容或图片失效,请留言反馈。 所有牛逼的人都有一段苦逼的岁月。 但是你只要像SB一样去坚持,终将牛逼!!! ✊✊✊

在Windows和Linux中都开启定时任务

通过维护一个文件的先后顺序,让二者产生联系

Windwos

Windows中的定时任务需要在任务计划程序中,新增设置

Crontab Windows

在设置执行程序的时候,要注意上面是Python.exe的绝对路径,下面是需要执行的文件的绝对路径

Crontab Windows

在Windows中的定时任务,我们可以直接通过手动执行的方式完成测试

在Windows中使用Celery的时候,需要注意:

# 安装Celery
pip3 install celery

# celery 不支持在 windows 下运行任务,需要借助 eventlet 来完成
pip3 install eventlet

# -c 是协程的数量,生产环境可以用 1000
celery -A main worker -l info -P eventlet  -c 10

Linux

Linux中的定时任务,分为两种情况:系统中使用、Django项目调用。

当我们在系统中使用启动定时任务的时候:

# 直接在任意位置,编辑一个定时任务的文件,在命令行直接启动

[root@localhost ~]# crontab [选项]
选项:
    -e:    编辑crontab定时任务
    -l:    查询crontab任务
    -r:    删除当前用户所有的crontab任务

当我们使用Django做项目集成的时候:

  1. 在项目的settings.py文件中,定义定时任务的参数
# 子应用
INSTALLED_APPS = [
    ... ...
    'django_crontab',   # 定时任务
    ... ...
]

# 定时任务参数
CRONJOBS = (
    # 初级模式
    ('*/5 * * * *', 'myproject.myapp.cron.my_scheduled_job'),

    # 中级模式
    ('*/1 * * * *', 'crontab_celery.cron_tasks.linux_crontab', f'>> {os.path.join(BASE_DIR, "logs/crontab.log")}'),
    ('*/1 * * * *', 'crontab_celery.file.tasks.file_calculate', f'>> {os.path.join(BASE_DIR, "logs/crontab.log")}'),
    ('* * * * * sleep 10;', 'crontab_celery.cron_tasks.test_crontab', f'>> {os.path.join(BASE_DIR, "logs/crontab.log")}'),

    # 定时执行命令
    ('*/1 * * * *', 'django.core.management.call_command', ['celery -A crontab_celery.main worker -l info'], f'>> {os.path.join(BASE_DIR, "logs/celery.log")}'),

    # 高级模式
    ('0   0 * * 0', 'django.core.management.call_command', ['dumpdata', 'auth'], {'indent': 4}, '> /home/john/backups/last_sunday_auth_backup.json'),
)
  1. 在项目路径中,与manager.py同级位置
# 添加定时任务到系统中
python manage.py crontab add

# 显示已经激活的定时任务
python manage.py crontab show

# 移除定时任务
python manage.py crontab remove
  1. BUG
# 解决crontab中文问题
CRONTAB_COMMAND_PREFIX = 'LANG_ALL=zh_cn.UTF-8'

Linux中的Celery同Windows类似,在指定的文件路径下,启动celery即可

celery -A crontab_celery.main worker -l info

启动后效果如下:


0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区