任务队列 Celery

我们需要一个任务队列来进行任务的分配和维护,我们选择最常见的 Celery

Celery 介绍

Celery (芹菜)是一个异步任务队列/基于分布式消息传递的作业队列
(PS:不得不说,我并不喜欢芹菜,这差点让我放弃了它

Celery 的结构非常简单,大致分为 3 个部分:

  • worker部分负责任务的处理,即执行工作的线程
  • broker部分负责任务消息的分发以及任务结果的存储,这部分任务主要由中间数据存储系统完成,比如消息队列服务器 RabbitMQ 、Redis 、Amazon SQS、MongoDB、IronMQ 等或者关系型数据库,使用关系型数据库依赖 Sqlalchemy 或者 Django 的 ORM
  • Celery主类负责进行任务最开始的指派与执行控制,可以是单独的 Python 脚本,也可以和其他程序结合,应用到 Django 或者 Flask 等 Web 框架里面以及你能想到的任何应用

安装

pip install celery
pip install celery-with-redis
pip install flower

flower 是 Celery 的监控工具,提供了图形界面监控任务的执行

安装 redis

wget http://download.redis.io/releases/redis-4.0.9.tar.gz
tar xzf redis-4.0.9.tar.gz
cd redis-4.0.9
make -j8

启动 redis

src/redis-server

image_1cauuendb70qj7s103183n1h59m.png-96.9kB
启动 flower

python2.7 /usr/local/bin/flower --port=7788 --broker=redis://localhost:6379/0 --broker_api=redis://localhost:6379/0

image_1cauubp331slr1kd4tdd603gta9.png-153kB
启动 celery

celery -A tasks worker --loglevel=info

image_1cauuv7l645vsjj19051tt11o5q13.png-53.1kB

提交任务

tasks.py

import time
from celery import Celery, platforms

platforms.C_FORCE_ROOT = True
celery = Celery("tasks", broker='redis://localhost:6379/0')

@celery.task
def add(x, y):
    return x + y

任务执行

from tasks import *

add.delay(1, 2)

执行结果

image_1cauvh8hv2r118ffe207jr1iik1g.png-24.1kB

查看 flower(http://localhost:7788/)
image_1cav0dnc6jseptddl7gi7efp1t.png-36.2kB

以 root 身份启动 celery

celery -A symbolic_exec worker --loglevel=info
export C_FORCE_ROOT = "true"

若任务被修改,Celery 需要重新启动,否则无法随之更改

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值