flask、celery+redis 实现定时任务和异步——(三) 时间篇

一、celery

Celery 是一个异步任务队列。你可以使用它在你的应用上下文之外执行任务。总的想法就是你的应用程序可能需要执行任何消耗资源的任务都可以交给任务队列,让你的应用程序自由和快速地响应客户端请求。使用 Celery 运行后台任务并不像在线程中这样做那么简单。但是好处多多,Celery 具有分布式架构,使你的应用易于扩展。一个 Celery 安装有三个核心组件:

  • Celery 客户端: 用于发布后台作业。当与 Flask 一起工作的时候,客户端与 Flask 应用一起运行。

  • Celery workers: 这些是运行后台作业的进程。Celery 支持本地和远程的 workers,因此你就可以在 Flask 服务器上启动一个单独的 worker,随后随着你的应用需求的增加而新增更多的 workers。

  • Broker消息代理: 客户端通过消息队列workers 进行通信,Celery 支持多种方式来实现这些队列。最常用的代理就是 RabbitMQRedis
    在这里插入图片描述
    二、简单应用

通过一个简单例子,了解Flask的定时任务,项目名称:celery_demo,目录结构如下:

|---app
| |---__init__.py
| |---celery_manage
| | | ---- __init__.py
| | | ---- views.py
|---config.py
|---celery_worker.py
  1. 安装依赖包
pip install flask-celery-helper

另:Flask官网上的flask-celery包可能因为长期未维护的原因,在应用中与python的celery包存在兼容问题,所以选择了这个依赖包。

  1. 编辑配置文件,config.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
from datetime import timedelta
 
basedir = os.path.abspath(os.path.dirname(__file__))
 
class Config:
    SECRET_KEY = os.environ.get('SECRET_KEY') or 'hard to guess string'
    # 定时任务配置
    CELERY_BROKER_URL = 'redis://localhost:6379',
    CELERY_RESULT_BACKEND = 'redis://localhost:6379'
    # CELERY_TIMEZONE = 'Asia/Shanghai'
    CELERYBEAT_SCHEDULE = {
   
        # 定义任务名称:import_data
        # 执行规则:每10秒运行一次
        'import_data': {
   
            'task': 'import_data',
            'schedule': timedelta(seconds=10)
        },
    }
 
    @staticmethod
    def init_app(app):
        pass
 
class DevelopmentConfig(Config):
    DEBUG = True
    SQLALCHEMY_DATABASE_URI = os.environ.get(
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值