整个项目工程如下

__init__.py

"""
注意点:python3.7 需要执行 pip install --upgrade https://github.com/celery/celery/tarball/master
否则会报 from . import async, base SyntaxError: invalid syntax celery -A __init__ worker --concurrency=5 -l INFO -Q celery,save_redis
celery -A __init__ worker -l info -Q save_mongo
cd /Users/admin/PycharmProjects/function_test/adminSyS/mq&&celery -A __init__ worker --concurrency=5 celery 启动 --autoscale=10,3 当worker不足时自动加3-10个
celery -A __init__ worker --concurrency=5 -l INFO -Q celery,save_redis2,save_redis --autoscale=10,3 supervisor 配置
[program:celery]
directory = /data/app/adminSyS/mq
command = /data/app/adminSyS/venv/bin/celery -A __init__ worker --concurrency=5 -l INFO -Q celery,save_redis
autostart = true
autorestart = true
startsecs = 5
startretries = 3 监控:
文档 https://flower-docs-cn.readthedocs.io/zh/latest/install.html
pip install flower
celery flower --broker=redis://:z1234567@47.93.235.228:6379/5 --port=5555
测试 http://47.93.235.228:9114
"""
import os
import sys
sys.path.append(os.path.abspath(os.path.dirname(__file__)) + "/..")
from celery import Celery app = Celery(include=["mq.tasks"])
app.config_from_object("celeryconfig") # 指定配置文件

celeryconfig.py

import os
import sys sys.path.append(os.path.abspath(os.path.dirname(__file__)) + "/..")
from kombu import Queue, Exchange BROKER_URL = "redis://:redis@127.0.0.1:6379/5" # 消息代理
CELERY_RESULT_BACKEND = "redis://:redis@127.0.0.1:6379/6" # 任务执行结果存放地址
CELERY_TASK_SERIALIZER = "json" # 任务序列化和翻序列化的方案
CELERY_RESULT_SERIALIZER = "json" # 读取任务结果序列化方式
CELERY_TASK_RESULT_EXPIRES = 60 * 60 * 24 # 任务过期时间
CELERY_ACCEPT_CONTENT = ["json", "msgpack"] # 接受的任务类型
BROKER_TRANSPORT_OPTIONS = {'visibility_timeout': 86400} # 任务重发时间
CELERYD_MAX_TASKS_PER_CHILD = 400 # 每个worker执行了多少任务就会自动重启防止内存泄漏 # 指定任务队列 save_redis save_redis2
CELERY_QUEUES = (
Queue("default", Exchange("default"), routing_key="default"),
Queue("save_redis", Exchange("save_redis"), routing_key="save_redis"),
Queue("save_redis2", Exchange("save_redis2"), routing_key="save_redis2")
) # mq.tasks.taskA mq.tasks.taskB 具体函数名
CELERY_ROUTES = {
'mq.tasks.taskA': {"queue": "save_redis", "routing_key": "save_redis"},
'mq.tasks.taskB': {"queue": "save_redis2", "routing_key": "save_redis2"}
}

tasks.py

from mq import app
import redis
import time rds = redis.Redis(
host="localhost",
port=6379,
db=7,
password="redis") # 客户端 @app.task
def taskA(x, y):
time.sleep(10)
rds.setex(name="taskA", value=x + y, time=3600)
return x + y @app.task
def taskB(x, y, c):
time.sleep(10)
rds.setex(name="taskB{}".format(c), value=x + y, time=3600)
return x + y

test.py

import sys
import os sys.path.append(os.path.abspath(os.path.dirname(__file__)) + "/..")
from mq.tasks import taskA, taskB #re1 = taskA.delay(100, 200)
# print(re1)
# print(re1.status) # 服务端 for i in range(10):
re2 = taskB.delay(100, i, i)
print(re2)
print(re2.status)

celery客户端启动  save_redis2,save_redis 代表函数名    --autoscale=10,3 当work不够用时自动起3-10个进程

celery -A __init__  worker --concurrency=5 -l INFO -Q celery,save_redis2,save_redis --autoscale=10,3

#启动方式

../venv/bin/celery -A __init__ worker --concurrency=5 -l INFO -Q celery,save_redis2,save_redis --autoscale=10,3


# 启动方式打印log
command=/home/op/saiyan_game_center/venv/bin/celery -A __init__ worker --concurrency=8 -l INFO -Q upload_box_task --autoscale=5,3 --logfile=/home/op/saiyan_game_center/logs/log.log

celery web监控

文档:https://flower-docs-cn.readthedocs.io/zh/latest/install.html

安装:pip install flower

启动:celery flower --broker=代理url --port=5555

celery flower --broker=redis://:redis@127.0.0.1:6379/5 --port=5555

Celery 服务搭建的更多相关文章

  1. ServiceStack.Hello——跨平台.net REST api服务搭建

    ServiceStack.Hello--跨平台.net REST api服务搭建 自己创建: https://github.com/ServiceStack/ServiceStack/wiki/Cre ...

  2. WCFRESTFul服务搭建及实现增删改查

    WCFRESTFul服务搭建及实现增删改查 RESTful Wcf是一种基于Http协议的服务架构风格,  RESTful 的服务通常是架构层面上的考虑. 因为它天生就具有很好的跨平台跨语言的集成能力 ...

  3. 微信小程序语音识别服务搭建全过程解析(项目开源在github)

    silk v3录音转olami语音识别和语义处理的api服务(ubuntu16.04服务器上实现) ## 重要的写在前面 重要事项一: 目前本文中提到的API已支持微信小程序录音文件格式:silk v ...

  4. 微信小程序语音识别服务搭建全过程解析(https api开放,支持新接口mp3录音、老接口silk录音)

    silk v3(或新录音接口mp3)录音转olami语音识别和语义处理的api服务(ubuntu16.04服务器上实现) 重要的写在前面 重要事项一: 所有相关更新,我优先更新到我个人博客中,其它地方 ...

  5. Git服务搭建及github使用教程

    .pos { position: fixed; top: 35%; left: 90% } .pos a { border: 2px solid white; background: #99CCFF; ...

  6. eureka服务搭建

    Server端 引入eureka server的maven依赖 引入依赖时无需给定eureka的版本号,maven会根据当前使用的SpringCloud版本来判断应该引入哪个版本的euraka ser ...

  7. NodeJs之服务搭建与数据库连接

    NodeJs之服务搭建与数据库连接 一,介绍与需求分析 1.1,介绍 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 使用了一个事件驱动.非阻 ...

  8. JumpServer1.0 服务搭建

    JumpServer1.0 服务搭建 系统环境配置 setenforce 0 systemctl stop iptables.service systemctl stop firewalld.serv ...

  9. Linux-ftp服务搭建

    云服务器ESC 部署vsftpd服务 记一次ftp服务搭建的采坑过程,这个坑一直卡了很久时间,都给忘记了.最近由于公司项目需要部署FTP,经过各种采坑,终于把这个坑给填上了.废话不多说,开干 环境说明 ...

随机推荐

  1. Kali在NET模式下不能联网的解决方法

    1.第一种情况 首先ifconfig,可以看到没有正在工作的网卡,只有localhost 然后ifconfig -a,可以看到eth0这块网卡并没有离家出走,只是罢工了而已 接下来是关键步骤 leaf ...

  2. SQL注入之Sqlmap使用

    我们都知道,对于网络渗透最重要的一步是要拿到后台数据库管理员的密码与用户名,那么怎么得到这个用户名和密码呢?就要用到今天所说的Sqlmap,它不仅适用于内网环境,在外网环境也是非常受欢迎的,并且在Ka ...

  3. JAVA线程池的创建与使用

    为什么要用线程池? 我们都知道,每一次创建一个线程,JVM后面的工作包括:为线程建立虚拟机栈.本地方法栈.程序计数器的内存空间(下图可看出),所以线程过多容易导致内存空间溢出.同时,当频繁的创建和销毁 ...

  4. mmdetection安装教程

    如果官方教程不行再参考我的吧,我的环境如下: ubuntu cuda10 cudnn7.5 步骤: 1.使用conda创建一个虚拟环境 conda create -n mmdetection pyth ...

  5. Java8新特性(1)—— Stream集合运算流入门学习

    废话,写在前面 好久没写博客了,懒了,以后自觉写写博客,每周两三篇吧! 简单记录自己的学习经历,算是对自己的一点小小的督促! Java8的新特性很多,比如流处理在工作中看到很多的地方都在用,是时候扔掉 ...

  6. 201671010406-丁家辉-实验十四 团队项目评审&课程学习总结

    实验十四 团队项目评审&课程学习总结 项目 内容 这个作业属于哪个课程 [教师博客主页链接] 这个作业的要求在哪里 [作业链接地址] 作业学习目标 (1)掌握软件项目评审会流程(2)反思总结课 ...

  7. Codechef Palindromeness 和 SHOI2011 双倍回文

    Palindromeness Let us define the palindromeness of a string in the following way: If the string is n ...

  8. 前端性能----从输入URL开始到返回数据的中间经历过程

    这是一个古老的问题,即我们输入URL后按下回车到网页测呈现都发生了什么? 首先来看一张图: 表示了数据从源端到目的端的封装和拆解过程 预处理URL URL格式:  以http为例: http://ww ...

  9. js的对象创建

    创建对象 字面量的方式: var myHonda = {color: "red", wheels: 4, engine: {cylinders: 4, size: 2.2}} 就是 ...

  10. nginx中的url转发

    公司老项目是python做的,作为一个学java的,现在让我去重构这个项目的一部分页面,所以决定用java来重做,然后通过nginx url转发来实现两个项目的无缝衔接,好了 接下来看如何配置URL转 ...