celery分布式任务部署多台机器,形成一发布者,多消费者(每个消费者处理不同任务)

celery分布式任务部署多台机器,形成一发布者,多消费者(每个消费者处理不同任务)

先上图
结构图主要结构分为
任务发布者:发布任务到调度者中
调度者:一般为消息队列的存储,如redis
任务消费者:从调度者获取任务,消费任务,返回结果
结果存储:和调度者配对,消费者可以将结果反馈给结果存储队列

直接上代码

任务发布者:
main.py

# This is a sample Python script.

# Press Shift+F10 to execute it or replace it with your code.
# Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings.
from celery import Celery
import celery_config

if __name__ == '__main__':
    try:
        app = Celery('tasks', broker=celery_config.broker_url)
        # 此处的 celeryConfig 即 服务器A 上的配置,可以完全复制过来
        app.config_from_object(celery_config)
        print(app)
        #  1. 此处 send_task(), 直接使用任务的名称,之前使用 tasks.say_hello 没有成功
        #  2. 如果有 queue ,建议指定
        #  3. 可以直接传参数的
        for i in range(1, 10):
            print(i)
            app.send_task("tasks.add", queue=celery_config.task_queues[0], args=(i, i))
            app.send_task("tasks.multiply", queue=celery_config.task_queues[1], args=(i, i))
    except Exception as e:
        print(e)
        print("error")

任务发布者配置文件celery_config.py

from celery.schedules import crontab
from kombu import Queue
from kombu import Exchange
# celery的配置
from datetime import timedelta

broker_url = r"redis://IP:6379/5"
# broker_url = r"redis://127.0.0.1:6379/5"
# 结果存储地址
# CELERY_RESULT_BACKEND = r"redis://127.0.0.1:6379/3"
result_backend = r"redis://IP:6379/6"
# result_backend = r"redis://127.0.0.1:6379/6"
# 任务序列化方式, 4.0版本后默认为json
# CELERY_TASK_SERIALIZER ='json'
task_serializer = "json"

#  任务执行结果序列化方式
serializer = 'json'
#  任务结果保存时间,超过这个会删除结果
result_expires = 60 * 60 * 5
# 指定任务接受的内容类型(序列化),默认值:Default: {'json'} (set, list, or tuple). 按需要可以变成['application/json']
accept_content = {
   'json'}
# 时区
timezone = "Asia/Shanghai"
enable_utc = True
worker_concurrency = 5  # celery worker并发数
worker_max_tasks_per_child = 5  # 每个worker最大执行任务数

"""
这里task_queues和task_routes需要成对出现
"""
task_queues = (
    Queue('priority_low', exchange=Exchange('priority', type='direct'), routing_key='priority_low'),
    Queue('priority_high'
  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值