首页 > 其他分享 >celery的使用

celery的使用

时间:2022-08-21 10:58:46浏览次数:42  
标签:Celery tasks worker celery 任务 使用 import

celery

介绍

• 一个简单、灵活且可靠、处理大量消息的分布式系统,可以在一台或者多台机器上运行。
• 单个 Celery 进程每分钟可处理数以百万计的任务。
• 通过消息进行通信,使用消息队列(broker)在客户端和消费者之间进行协调。

总体架构

Celery的架构由消息中间件(message broker),任务执行单元(worker)和任务执行结果存储(task result store)三部分组成。

消息中间件
Celery本身不提供消息服务,但是可以方便的和第三方提供的消息中间件集成,包括RabbitMQ,Redis,MongoDB等

任务执行单元
Worker是celery提供的任务执行的单元,worker并发的运行在分布式的系统节点中。

任务结果存储
Task result store用来存储Worker执行的任务的结果,Celery支持以不同方式存储任务的结果,包括AMQP,redis,memcached,mongodb,SQLAlchemy,Django等

注册任务

import os

from celery.app import Celery

# 设置Django环境,告诉celery当前是Django项目;项目名字.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'meiduo_market.settings')

# 2 创建celery对象,这里我一般同一台服务器部署同一个项目时会使用项目的名字避免冲突;celery_tasks包名字
app = Celery('celery_tasks')

# 3 设置 broker
app.config_from_object("celery_tasks.config");celery_tasks包名字.配置文件

# 4celery自动检测任务 这里会自动去celery_tasks.sms下找tasks.py
app.autodiscover_tasks(['celery_tasks.sms'])



特别注意:
在同一台服务器做新旧迁移的时候,使用celery要特意区分出Celery('celery_tasks')的名字,
  还有celery_tasks.config文件里面的redis的消息接收和结果的队列不要和已经使用的celery监控的对象一致。如果一致了会被其他的celery消费。

启动

celery -A celery_tasks.main worker -l info #这是linux的命令
-A指对应的应用程序, 其参数是项目中 Celery实例的位置。
worker指这里要启动的worker。
-l指日志等级,比如info等级
windows启动celery 需要加参数,用如下命令启动服务
  celery -A celery_tasks.main worker -l info --pool=solo
  或者
  celery -A celery_tasks.main worker -l info -P eventlet

定时任务

Scheduler(定时任务,周期性任务)

一种常见的需求是每隔一段时间执行一个任务

在celery中执行定时任务非常简单,只需要设置celery对象的CELERYBEAT_SCHEDULE属性即可。

配置如下 config.py

from __future__ import absolute_import

BROKER_URL = "redis://localhost:6379/0"
CELERY_BACKEND_URL = "redis://localhost:6379/1"

CELERY_TIMEZONE = "Asia/Shanghai"

from datetime import timedelta

CELERYBEAT_SCHEDULE = {
  'add-every-30-seconds':{
      'task':'proj.tasks.add',
      'schedule':timedelta(seconds=30),
      'args':(16, 16)
  },
}
注意配置文件需要指定时区,这段代码表示每隔30秒执行add函数,一旦使用了scheduler,启动celery需要加上-B参数。

celery -A proj worker -B -l info

 

标签:Celery,tasks,worker,celery,任务,使用,import
From: https://www.cnblogs.com/topass123/p/16609595.html

相关文章

  • 函数式接口-使用Lambda作为参数和返回值
    使用Lambda作为参数和返回值如果抛开实现原理不说,Java中的Lambda表达式可以被当作是匿名内部类的替代品。如果方法的参数是一个函数式接口类型,那么就可以使用Lambda表达式......
  • 01 速成手册使用指南
    01速成手册使用指南点击文本框设置格式点击动画菜单这时窗口的工作区就会被压缩地很小,点击弹出的菜单项的头部,可移动到任何位置,使得工作区域变大。......
  • django rest framework快速使用
    一、安装相关的依赖$pipinstalldjangorestframework$pipinstallmarkdown#MarkdownsupportforthebrowsableAPI.$pipinstalldjango-filter#Filt......
  • SSD1306 屏幕使用-Micropython
    1、I2C总线是什么?I2C:俗称集成电路总线,是一种简单、双向二线制同步串行通信总线,使用多主从架构。它只需要两根线即可在连接于总线上的器件之间传送信息。主器件用于启动总......
  • 使用yarn 进行安装包
    Yarn是什么?“Yarn是由Facebook、Google、Exponent和Tilde联合推出了一个新的JS包管理工具,正如官方文档中写的,Yarn是为了弥补npm的一些缺陷而出现的。”这句话......
  • Vue/uniapp使用雪花算法生成随机ID
    安装snowflake-id插件npmisnowflake-id 页面导入雪花插件importSnowflakeIdfrom"snowflake-id"; 方法内使用雪花算法constsnowflake=newSnowflak......
  • MySQL使用总结
    最近在做一个数据迁移的项目,把mysql数据库中的数据迁移到SqlServer数据库中。在这里记录一下最近遇到的一些问题。一、MySQL中没有top 在MySQL中没有top查询,但是可以使......
  • 使用多线程实现四个窗口共同卖票
    创建票对象/***projectName:testSpring**@author:*time:2022/8/2023:04*description:票对象,这里实现Runnable方法来重写Run方法*/publicclassTicketim......
  • 使用idea remote 开发体验
    本地使用idea开发最不好的一个体验就是打开稍大的工程就非常的卡,怎么调参数都没用,现在idea推出了idearemote就赶紧来体验下。使用方式除了idea不需要额外下载什么包,但是......
  • 运维脚本---windows10家庭版不能使用组策略的问题----以及关机提示task hosts windows
    1、建立1111.bat脚本@echooff@echo"这个批处理文件将在Windows10家庭版上启用组策略编辑器."pushd"%~dp0"。。dir/b%SystemRoot%\servicing\Packages\Micros......