Python编程:Celery执行异步任务和定时任务

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: Python编程:Celery执行异步任务和定时任务

image.png

1、编写函数celery_app.py

from celery import Celery
import time
broker = "redis://localhost:6379/1"
backend = "redis://localhost:6379/2"
app = Celery("my_task", broker=broker, backend=backend)
@app.task(name="task")
def add(a, b):
    print("coming...")
    time.sleep(5)
    return a + b
if __name__ == '__main__':
    result = add(1, 2)
    print(result)

2、启动worker


$ celery worker -A celery_app -l INFO

参数:

A: app文件名称

l:日志级别


3、启动任务

> from celery_app import add
> result = add.delay(3, 4)
> result.ready()
> result.get()

4、工程化使用

目录结构

├── app.py
└── celery_app
    ├── __init__.py
    ├── celeryconfig.py
    ├── task1.py
    └── task2.py

实例化Celery __init__.py

# -*- coding: utf-8 -*-
from celery import Celery
app = Celery(__file__)
# 加载配置模块
app.config_from_object("celery_app.celeryconfig")

配置文件 celeryconfig.py


# -*- encoding:utf-8 -*-
# celery配置文件
BROKER_URL = 'redis://localhost:6379/1'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/2'
# 设置时区,默认UTC
CELERY_TIMEZONE = 'Asia/Shanghai'
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_ENABLE_UTC = True
# 导入指定的任务模块
CELERY_IMPORTS = (
    "celery_app.task1",
    "celery_app.task2"
)

任务文件 task1.py

# -*- coding: utf-8 -*-
import time
from celery_app import app
@app.task
def add(x, y):
    time.sleep(3)
    return x + y

任务文件 task2.py

# -*- coding: utf-8 -*-
import time
from celery_app import app
@app.task
def multiply(x, y):
    time.sleep(5)
    return x * y

启动worker

$ celery worker -A celery_app -l INFO

5、定时任务

可以直接配置到配置文件中 celeryconfig.py


from datetime import timedelta
from celery.schedules import crontab
# 设置定时任务
CELERYBEAT_SCHEDULE = {
    "task1": {
        "task": "celery_app.task1.add",
        "schedule": timedelta(seconds=10),
        "args": (2, 8)
    },
    "task2": {
        "task": "celery_app.task1.add",
        "schedule": crontab(hour=14, minute=59),
        "args": (2, 8)
    }
}

启动定时任务


$ celery beat -A celery_app -l INFO

celery 4.1.0 时区bug -> 4.0.2


一条命令启动异步任务和定时任务


$ celery -B -A celery_app worker -l INFO

相关文章
|
3月前
|
供应链 并行计算 算法
1行Python搞定高频任务!26个实用技巧解决日常+进阶需求
本文整理了26个Python极简技巧,涵盖日常高频操作与进阶玩法,助你用最少代码高效解决问题,提升编程效率。适合各阶段Python学习者参考。
136 27
|
5月前
|
数据采集 存储 JSON
Python爬取知乎评论:多线程与异步爬虫的性能优化
Python爬取知乎评论:多线程与异步爬虫的性能优化
|
5月前
|
数据采集 存储 C++
Python异步爬虫(aiohttp)加速微信公众号图片下载
Python异步爬虫(aiohttp)加速微信公众号图片下载
|
5月前
|
数据采集 监控 调度
干货分享“用 多线程 爬取数据”:单线程 + 协程的效率反超 3 倍,这才是 Python 异步的正确打开方式
在 Python 爬虫中,多线程因 GIL 和切换开销效率低下,而协程通过用户态调度实现高并发,大幅提升爬取效率。本文详解协程原理、实战对比多线程性能,并提供最佳实践,助你掌握异步爬虫核心技术。
|
11月前
|
人工智能 开发者 Python
Chainlit:一个开源的异步Python框架,快速构建生产级对话式 AI 应用
Chainlit 是一个开源的异步 Python 框架,帮助开发者在几分钟内构建可扩展的对话式 AI 或代理应用,支持多种工具和服务集成。
1155 9
|
10月前
|
数据采集 Java 数据处理
Python实用技巧:轻松驾驭多线程与多进程,加速任务执行
在Python编程中,多线程和多进程是提升程序效率的关键工具。多线程适用于I/O密集型任务,如文件读写、网络请求;多进程则适合CPU密集型任务,如科学计算、图像处理。本文详细介绍这两种并发编程方式的基本用法及应用场景,并通过实例代码展示如何使用threading、multiprocessing模块及线程池、进程池来优化程序性能。结合实际案例,帮助读者掌握并发编程技巧,提高程序执行速度和资源利用率。
493 0
|
11月前
|
Python
深入理解 Python 中的异步操作:async 和 await
Python 的异步编程通过 `async` 和 `await` 关键字处理 I/O 密集型任务,如网络请求和文件读写,显著提高性能。`async` 定义异步函数,返回 awaitable 对象;`await` 用于等待这些对象完成。本文介绍异步编程基础、`async` 和 `await` 的用法、常见模式(并发任务、异常处理、异步上下文管理器)及实战案例(如使用 aiohttp 进行异步网络请求),帮助你高效利用系统资源并提升程序性能。
1066 7
|
11月前
|
存储 安全 数据可视化
用Python实现简单的任务自动化
本文介绍如何使用Python实现任务自动化,提高效率和准确性。通过三个实用案例展示:1. 使用`smtplib`和`schedule`库自动发送邮件提醒;2. 利用`shutil`和`os`库自动备份文件;3. 借助`requests`库自动下载网页内容。每个案例包含详细代码和解释,并附带注意事项。掌握这些技能有助于个人和企业优化流程、节约成本。
429 3
|
存储 NoSQL Java
万字总结!Python 实现定时任务的八种方案(上)
万字总结!Python 实现定时任务的八种方案
3386 0
万字总结!Python 实现定时任务的八种方案(上)
|
消息中间件 存储 SQL
万字总结!Python 实现定时任务的八种方案(下)
万字总结!Python 实现定时任务的八种方案(下)
1061 0
万字总结!Python 实现定时任务的八种方案(下)

推荐镜像

更多