python分布式系统Celery安装使用实例讲解

 更新时间:2023年12月26日 10:54:15   作者:简讯Alfred  
这篇文章主要为大家介绍了python分布式系统Celery安装使用实例讲解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

Celery 使用

Celery 是一个简单高效可靠的分布式系统。在处理大量消息,实时处理异步任务,定时执行任务,支持任务调度等方面使用起来更为灵活。

简单理解 Celery 就是发布任务(Producer),消息中间件(Broker)接收任务,执行任务(Worker)或定时执行任务(Celery Beat)。

任务队列

任务队列,顾名思义就是任务工作单元的集合,集合中存放了等待执行的任务。

何时使用任务队列?假如当前我们需要执行某项任务,但是该任务比较耗时,且可以放在后台执行,为了不影响当前操作,我们就把该任务放在任务队列,等待调用和执行。最常使用的场景是在 web 开发中。例如我们需要实现一个用户认证发送电子邮件的功能,如果不使用异步执行,我们需要等待电子邮件发送完成才可执行下步操作,但是发送邮件的过程中,web 页面会处于假死状态,影响用户使用体验。简单的 web 应用可以用多线程来完成该任务,一旦任务量加重,还是需要使用更为强大的 Celery。

定时执行任务,可以理解为 crontab。

安装

使用 Celery 的第一步就是选择消息中间件。这里我们选择 redis,上手快好操作。

安装 redis

官方文档[1]有详细的源码安装说明。

这里介绍在 Ubuntu 16.04 下通过 apt 工具安装:

apt-get install redis-server -y

启动 redis:

redis-server

测试是否成功安装:

➜  ~ redis-cli
127.0.0.1:6379> PING
PONG

说明安装成功。

终端输入:

python3 -m pip install redis

这样我们可以使用 python 操作 redis。

安装 Celery

终端执行:

python3 -m pip install celery

这样就完成了 redis 和 Celery 的安装。

简单应用

当我们安装好 redis,并启动服务后,可以创建一个新的文件夹用来练习 celery。

mkdir celery_test

进入该目录后,创建文件 test.py,输入以下内容:

from celery import Celery
app = Celery(
    'hello',
    broker="redis://127.0.0.1:6379/1"
)
@app.task
def hello():
    # 耗时需要异步执行的任务
    return 'hello world'

这就完成了 Celery 的简单应用。

如何使用呢?

我们需要在终端启动 Celery 服务。输入:

celery worker -A test --loglevel INFO

使用 python shell 简单试一下:

>>> from test import hello
>>> hello.delay()
<AsyncResult: 182f57d7-71fc-4c61-b6b4-dbdd76ac4068>

是不是很简单?这样就完成了 Celery 的简单使用。

使用配置文件

我们可以将 Celery 任务单独做成模块的形式,并通过配置文件来配置 Celery。

结构如下:

.
├── app
│   ├── __init__.py
│   ├── config.py
│   └── tasks.py
└── test.py

app 文件夹下存放 Celery 相关配置和任务。

__init__.py 用来初始化 Celery,config.py 是 Celery 的配置文件,tasks.py 存放任务。

test.py 用来测试执行任务。

init.py

from celery import Celery
app = Celery("hello")
# 使用配置文件
app.config_from_object("app.config")

config.py

"""
Celery 配置
"""
broker_url = "redis://127.0.0.1:6379/1"

很多教程基本使用都是大写配置,但官方文档中介绍在 4.0 以后开始推荐使用小写配置,所以依据文档这里使用小写配置。

具体更多详细配置可以查看Configuration and defaults[2]。

tasks.py

from app import app
@app.task
def hello():
    return "hello, world!"

这个文件存放耗时任务。

在终端启动 Celery:

celery worker -A app.tasks --loglevel INFO

启动成功后在 python shell 中测试:

>>> from app import tasks
>>> tasks.hello.delay()
<AsyncResult: 3aaa9e64-66ea-42dc-bed7-b1921275e9f9>

查看 Celery,和之前一样,说明就执行成功啦!

部署 Celery 和 redis

我们需要使用 supervisor 启动和管理 Celery 和 redis 服务。

pip install supervisor

安装完成后修改配置文件 /etc/supervisord.conf,加入以下配置(redis 的配置要写在 Celery 之前):

[program:redis]
user = root
directory=/root/celery_test
command=redis-server
numprocs=1
startsecs = 5
startretries = 3
autostart=true
autorestart=true
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile = /root/logs/redis_stdout.log

[program:celery_worker]
user = root
directory=/root/celery_test
command=celery worker -A app.tasks --loglevel INFO --logfile /root/celery_worker.log
numprocs=1
startsecs = 5
startretries = 3
autostart=true
autorestart=true
stdout_logfile = /root/logs/celery_stdout.log

输入命令启动服务:

supervisord -c /etc/supervisord.conf

这样就完成了 redis 和 Celery 的部署。

引用链接

官方文档: https://redis.io/download#installation 

Configuration and defaults: http://docs.celeryproject.org/en/latest/userguide/configuration.html#new-lowercase-settings 

以上就是python分布式系统Celery安装使用实例讲解的详细内容,更多关于python分布式系统Celery的资料请关注脚本之家其它相关文章!

相关文章

  • python之json格式解析与转换方式

    python之json格式解析与转换方式

    使用Python的内置json库可以实现JSON和Python对象的互相转换,有效的JSON格式字符串是指使用双引号、键唯一且没有尾随逗号的字符串,json.loads()用于将JSON字符串转换为Python对象,json.dumps()则将Python对象转化为JSON字符串
    2024-09-09
  • Python设计模式之备忘录模式原理与用法详解

    Python设计模式之备忘录模式原理与用法详解

    这篇文章主要介绍了Python设计模式之备忘录模式原理与用法,结合实例形式详细分析了备忘录模式的相关概念、原理及Python相关实现技巧,需要的朋友可以参考下
    2019-01-01
  • pyqt5 实现工具栏文字图片同时显示

    pyqt5 实现工具栏文字图片同时显示

    今天小编就为大家分享一篇pyqt5 实现工具栏文字图片同时显示的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • 运行tensorflow python程序,限制对GPU和CPU的占用操作

    运行tensorflow python程序,限制对GPU和CPU的占用操作

    今天小编就为大家分享一篇运行tensorflow python程序,限制对GPU和CPU的占用操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • pip install -r requirements.txt时遇到报错自动跳过

    pip install -r requirements.txt时遇到报错自动跳过

    本文主要介绍了pip install -r requirements.txt时遇到报错自动跳过,下面就来介绍了几种解决方法,具有一定的参考价值,感兴趣的可以了解一下
    2025-03-03
  • python实现简单的TCP代理服务器

    python实现简单的TCP代理服务器

    这篇文章主要介绍了python实现简单的TCP代理服务器,包含了完整的实现过程及对应的源码与说明文档下载,非常具有参考借鉴价值,需要的朋友可以参考下
    2014-10-10
  • 在tensorflow实现直接读取网络的参数(weight and bias)的值

    在tensorflow实现直接读取网络的参数(weight and bias)的值

    这篇文章主要介绍了在tensorflow实现直接读取网络的参数(weight and bias)的值,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • python代码实现将列表中重复元素之间的内容全部滤除

    python代码实现将列表中重复元素之间的内容全部滤除

    这篇文章主要介绍了python代码实现将列表中重复元素之间的内容全部滤除,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • Scrapy元素选择器Xpath用法汇总

    Scrapy元素选择器Xpath用法汇总

    这篇文章主要介绍了Scrapy元素选择器Xpath用法汇总,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • 解决pytorch 的state_dict()拷贝问题

    解决pytorch 的state_dict()拷贝问题

    这篇文章主要介绍了解决pytorch 的state_dict()拷贝问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03

最新评论