flask结合celery实现异步响应HTTP请求
摘要:
1.场景描述
2.flask介绍
3.celery介绍
4.项目伪代码记录
5.几个备注点
内容:
1.场景描述
最近在优化用户画像的东西,要开发一个给文本打标签的服务;我这边需要提供一个HTTP的异步回调接口,具体来说就是客户端请求我之后,我判断请求体有没有问题,如果没有返回200状态吗;之后开始我的具体计算逻辑,客户端不用关心这中间要消耗多长时间,当我计算完成之后通过调用另一个HTTP接口,把计算结果返还客户端。
2.flask介绍
这个最近才接触,所以不敢妄自总结。所以还是搬来官网文档:http://docs.jinkan.org/docs/flask/
3.celery介绍
这个是我解决异步计算的分布式任务队列,其中用到了redis(这是之前总结的一些文档redis总结1,redis总结2)做消息中间件,具体的介绍还是引用官网:http://docs.jinkan.org/docs/celery/
4.项目伪代码记录
import json
import logging
from logging.handlers import TimedRotatingFileHandler
from time import sleep from celery import Celery
from flask import Flask
from flask import request
import requests
##Flask configure
app = Flask(__name__) ##celery configure
app.config['CELERY_BROKER_URL'] = 'redis://localhost:6379/0'
app.config['CELERY_RESULT_BACKEND'] = 'redis://localhost:6379/0'
celery = Celery(app.name, broker=app.config['CELERY_BROKER_URL'])
celery.conf.update(app.config)
21 @celery.task
22 def my_background_task(args1,args2):
23 sleep(50)#这里是具体的处理逻辑,使用sleep代替
24 headers = {'content-type': 'application/json;charset=UTF-8'}
25 requests.post(url=reURL, data=data=json.dumps({'somedata':'xxxxx'}).encode('utf-8'),headers=headers)
@app.route('/get_tags')
def server_desc():
param = json.loads(request.data)
if param:
return json.dump({'status':200})
return json.dump({'status':400})
if __name__ == '__main__':
app.run(host='0.0.0.0', port=4020)
5.几个备注点
1.服务启动顺序:redis-server,celery,flask
2.celery版本,我用的3.1.24,之前用的4.x版本报错not enough values to unpack,后来发现了这个issue:https://github.com/celery/celery/issues/4178
3.关于报错
worker accepts messages serialized with pickle is a very bad idea! If you really want to continue then you have to set the C_FORCE_ROOT
environment variable (but please think about this before you do).
解决方案:
export C_FORCE_ROOT="true"
flask结合celery实现异步响应HTTP请求的更多相关文章
- Win10环境下使用Flask配合Celery异步推送实时/定时消息(Socket.io)/2020年最新攻略
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_163 首先得明确一点,和Django一样,在2020年Flask 1.1.1以后的版本都不需要所谓的三方库支持,即Flask-Ce ...
- celery介绍、架构、快速使用、包结构,celery执行异步、延迟、定时任务,django中使用celery,定时更新首页轮播图效果实现,数据加入redis缓存的坑及解决
今日内容概要 celery介绍,架构 celery 快速使用 celery包结构 celery执行异步任务 celery执行延迟任务 celery执行定时任务 django中使用celery 定时更新 ...
- Flask 与 Celery 在 windows 下的集成问题
Flask 与 Celery 在 windows 下的集成问题 所有的 Web 框架内部的视图中不适合执行需要长时间运行的任务,包括 Flask .Django 等.这类型的任务会阻塞 Web 的响应 ...
- SpringMVC响应Ajax请求(@Responsebody注解返回页面)
项目需求描述:page1中的ajax请求Controller,Controller负责将service返回的数据填充到page2中,并将page2整个页面返回到page1中ajax的回调函数. 一句话 ...
- Celery分布式异步任务框架
一.什么是Celery Celery是一个简单.灵活且可靠的,处理大量消息的分布式系统.专注于实时处理的异步任务队列,同时也支持定时任务 二.Celery架构 1.Celery的架构由三部分组成: 消 ...
- 使用HttpClient来异步发送POST请求并解析GZIP回应
.NET 4.5(C#): 使用HttpClient来异步发送POST请求并解析GZIP回应 在新的C# 5.0和.NET 4.5环境下,微软为C#加入了async/await,同时还加入新的Syst ...
- 纯js异步无刷新请求(只支持IE)
纯js异步无刷新请求 下载地址:http://pan.baidu.com/s/1slakL1F 所以因为非IE浏览器都禁止跨域请求,所以以只支持IE. <HTML> <!-- 乱码( ...
- 微信开发学习日记(八):7步看懂weiphp插件机制,核心目标是响应微信请求
又经过了几个小时的梳理.回顾,截至目前,终于对weiphp这个框架的机制搞明白了些.想要完全明白,自然还需要大把的时间.第1步: 配置微信公众号,http://weiphp.jiutianniao ...
- 服务器响应HTTP请求状态码(转)
当服务器响应HTTP请求时,其状态行的信息为HTTP的版本号,状态码,及解释状态码的简单说明: 1.客户方错误: 100 客户必须继续发出请求 101 客户要求服务器根据请求转换HTTP协议版本 2. ...
随机推荐
- 【cf849D】Rooter's Song(思维)
D. Rooter's Song 题意 x轴.y轴上有n个人,第i个人\(g_i==1\)则坐标为\((p_i,0)\)否则\((0,p_i)\),\(t_i\)秒后垂直所在坐标轴出发,到达边界x=w ...
- 自学华为IoT物联网_09 OceanConnect业务流程
点击返回自学华为IoT物流网 自学华为IoT物联网_09 OceanConnect业务流程 1. 物流网重要的连个协议介绍 1.1 重要物联网协议介绍----MQTT MQTT(消息队列遥测传输) ...
- bzoj3514(LCT+主席树)
题目描述 N个点M条边的无向图,询问保留图中编号在[l,r]的边的时候图中的联通块个数. 题解 对于一个截止时间来说,越晚的变越好. 所以我们可以维护一颗以边的序号为关键字的最大生成树,然后用主席树维 ...
- C语言学习记录之二
各种语句及编程笔记记录 1.if & else #include<stdio.h> int main(){ int if (situation) { //m ...
- Typescript学习笔记(二)枚举
跟随handbook的脚步,详细介绍一下枚举. enum Direction { Up = 1, Down, Left, Right } 一个枚举类型可以包含零个或多个枚举成员,每个枚举成员可以是一个 ...
- css 蒙层
蒙层 利用z-index: .mui-backdrop-other { position: fixed; top: 44px; right:; bottom:; left:; z-index:; ba ...
- [luogu4018][Roy&October之取石子]
题目链接 思路 这个题思路挺巧妙的. 情况一: 首先如果这堆石子的数量是1~5,那么肯定是先手赢.因为先手可以直接拿走这些石子.如果石子数量恰好是6,那么肯定是后手赢.因为先手无论怎样拿也无法直接拿走 ...
- 第二篇-Django建立数据库各表之间的联系(中)
上篇中已经建立了两个table,Book和Publish.这篇介绍如何用python增删改查数据库中的数据. 在views.py中创建一个index函数 from django.shortcuts i ...
- 计算基因上外显子碱基覆盖度(exon coverage depth):Samtool工具使用
假设想要计算ATP1A4基因上的外显子碱基覆盖度 首先查询这个基因所有exon的起始和终止位置,查询链接:http://grch37.ensembl.org/Homo_sapiens/Transcri ...
- try语句的使用
C语言里try是一个语句或函数.其作用是是抛出错误用. 将有可能产生错误的语句括在一起,放入try语句块.如果在try语句块中发生异常,FlashPlayer会创建一个错误对象,并将该Error对象派 ...