Python & Celery 学习笔记_基本操作

这边主要是纪录一下目前学习 Celery 的一些纪录,想要知道完整的 Celery 的介绍可以自行 Google ~
过程中如果有错误,欢迎留言讨论!!

一、套件安装

pip install celery
pip install redis
pip install gevent
pip install sqlalchemy

注: 由於在 windows 作业系统中不支援 Celery 的运作,需要另外安装套件才行
注: Celery 本身的 backend 为 ORM 架构,因此需要安装 sqlalchemy

二、如何运行 Celery Worker

celery -A <module_name> worker -l info -P gevent

注: 如果不是 windows 系统则不需要加上 -P gevent

三、建立基本的任务

  • celery_start.py
from celery import Celery

app = Celery(<module_name>, broker="<broker_url>", backend="<backend_url>")

@app.task
def hello_world(name: str):
    if name is not None:
        return f"hello {name}"
    else:
        return "hello world"

四、调用任务

在 Celery 中调用任务的方法大致上有三种,分别是:

  1. calling(call)
  2. delay(*args, **kwargs)
  3. apply_async(*args, **kwargs, ......其他参数)

(一)、calling(call)

这个方式为直接呼叫任务名称,但要注意此方法并不会将任务加入 worker 当中,
基本上就和普通的函数呼叫一样

>>> from celery_start import hello_world
>>> print(hello_world())

(二)、delay(*args, **kwargs)

使用这个方式,会将任务加入 celery worker 中,此方法可以理解为 apply_async
的简易方式,缺点为无法设定其他复杂的参数

>>> from celery_start import hello_world
>>> hello_world.delay("nick") 

https://ithelp.ithome.com.tw/upload/images/20220312/20144024fYdjzDgnLk.jpg

注: 笔者本地端开启 celery server 的语法为 celery -A celery_start worker -l info -P gevent

(三)、apply_async

这个方法为同样可以将任务加入列队中,但相较於 delay 可以多设定很多参数,
例如: 等待时间、甚麽时候要被执行...... 等等,下面的示范为,设定几秒钟後执行,
关於定时执行的部分,会於另一篇文章详细说明

>>> from celery_start import hello_world
>>> hello_world.apply_async(("nick",), countdown=20) 

可以看到透过设定 countdown 为 20 後,celery 会在收到任务後的 20 秒才开始执行
指定的任务
https://ithelp.ithome.com.tw/upload/images/20220312/20144024RDr63Ee0gc.jpg

五、结语

透过 celery 我们可以很轻松的实现任务的列队以及管理,在 celery 中还有许多设定
可以让任务更加有效率地进行,下一篇将会介绍 countdown、eta 等让 celery 可以定时
执行的方法


<<:  Laravel 技术笔记 (四)【Query Builder 查询建构器】

>>:  6. STM32-NVIC USART

Day 26 - 建立自己的K线资料库 (上)

本篇重点 本篇目标是要下载kbar资料及建立自已的K线资料库 抓取所有股票Contract 抓取所有...

Day12 - 祖父元件与孙子元件间的传音入密

今天跟大神 重新认识 Vue.js | Kuro Hsu 跨越层级的传递方式 学习祖先元件怎麽传递家...

Day20 CSS Banner与搜寻框

上一篇我们做完了导览列,今天我们就要建立导览列下面会有的一张大图片,以及搜寻框,一步一步完成我们的网...

Java学习之路01---环境安装

环境安装 在运行java程序之前我们需要先安装Java SE Development Kit,我们选...

Day8 AR的硬体设备,简洁介绍LCD与OLED

最近几期会来谈谈AR硬体设备的一部分。要能够用肉眼看到这些虚拟的东西,当然得结合显示器、处理器、感测...