测试之路 celery之多目录结构

各位周末好~小王同学又来给大家分享内容了。本期接着上一期的celery做一个收尾。废话不多,昊料开始~

开篇

上篇对celery做了简单的介绍。在我们日常项目中,少不了分层思想。本期就分层结构做一个简单的整理,以及在flask中,如何使用celery,实现消息的处理

消费者

首先我们将目录结构区分为两个模块。一个消费者、一个生产者(废话~~)

e125558b50852bd6babf00a943acc7f9.png

生产者我们先抛开不提。后面我们将flask的视图函数当做生产者即可

先捋一下消费者需要哪些内容?

  • 消息中间件的连接路径

  • 实例化celery对象

  • 天选打工人(消费者回调函数)

根据上面的区分,我们可以先实例化celery对象。先罗列出一个整体的目录结构

celery_uitl
--- main.py
--- config.py
--- workers
 --- tasks.py

main.py

# 1.实例化celery对象
cel_app = celer.Celery("flask_celery")、
# 3.绑定配置
# cel_app下有个加载config的方法。写入配置文件所在目录即可。
# 注意此处路径的符号也是“.”
cel_app.config_from_object("celery_util.config")
# 5.绑定消费者
# autodiscover_tasks方法底层默认制定了消费者文件的名称。如果想要修改
cel_app.autodiscover_tasks(["celery_util.workers"])

接着往下就是绑定中间件以及rendis

我们可以在上面实例化对象时,就将配置写死进去。但是在日常工作中,避免不了修改配置的情况。所以将其提取在配置文件中。(为了减少废话,就在上下这两个模块维护。请按照编号来看)

创建一个config的配置文件

config.py

#2.编写配置文件
# 接收和发送任务
BROKER_URL = "pyamqp://0.0.0.0:5673"
# 存储任务结果
CELERY_RESULT_BACKEND = "redis://0.0.0.0:6379/1"

最后是雇佣一个工人,来帮助我们执行任务并将任务结果返回(创建一个tasks的文件)

此处这个tasks的文件名必须写死,因为在celery底层默认会读取这个文件名。当然,如果想使用自定义了文件名,可以指定autodiscover_tasks() 的related_name=指定的文件名。注意不要加后缀

e0ea60ed33689a950bd2fb4db12e488d.png

workers/tasks.py

# 4. 创建一个消费者
@cel_app.task
def create_case_file(name):
    ...
    return {"msg": name}

以上消费者的定义就搞定了

生产者

刚才说到,生产者可以结合视图函数来生产数据

举个小例子

from celery_util.workers.tasks import create_case_file
result = ""
@app.route("/index",methods=["GET","POST"])
def index():
  global result
  # 生产者创建数据
  result = create_case_file.delay(name)
  return "index.html"

@app.route("/get_result")
def get_result():
  global result
  # 获取消费者处理的结果
  task_result = AsyncResult(id = result.id,app = cel_app)
  return jsonfly({"result":task_result.result})

上面这个例子中:

index创建了数据。并调用消费者启动线程,处理任务

get_result函数通过result变量,提取消费者处理的结果。并将结果返回

这里我简单用了个公共变量result来达成视图函数之间变量的传递。在项目中,我们可以通过ajax来传递result.id,并持续从**/get_result**这个路由上面获取任务的执行进度。实现页面loading的交互功能

结语

以上就是celery多目录以及结合flask的全部内容了

今天的分享就到这里了,各位大佬,下期见~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值