前一篇博文我们已经将基础知识和环境配置进行了介绍:

首先编写一个celerytask.py文件进行Celery的配置,同时耗时任务也写在该文件中

from celery import Celery

from init import app

from SZheConsole import SZheScan

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)

@celery.task

def SZheConsole(urls):

try:

for url in urls:

print("="*20)

print(url)

SZheScan(url)

except Exception as e:

print("错误")

print(e)

pass

print("allend!")

使用@celery.task装饰器修饰耗时函数SZheConsole,让Celery能够正确调用。

SZheScan函数是另外一个文件里面的函数,即对每一个URL进行单独的扫描,这部分过几天为了提高扫描速度会进行优化,这里将Celery用到项目里,暂时不改。

调用耗时任务SZheConsole的地方在index.py视图函数中,只选调用部分代码

@app.route('/console', methods=['GET', 'POST'])

@login_required

def console():

bugbit, bugtype = core.GetBit()

counts = core.GetCounts()

ports = core.GetPort()

services = core.GetServices()

target = core.GetTargetCount()

try:

lastscantime = BaseInfo.query.order_by(BaseInfo.id.desc()).first().date

except:

lastscantime = "暂无扫描"

pass

if request.method == 'GET':

return render_template('console.html', bugbit=bugbit, bugtype=bugtype, counts=counts, lastscantime=lastscantime,

ports=ports, services=services, target=target)

else:

urls = request.form.get('urls')

urls = urls.split()

print(urls)

for url in urls:

redispool.hincrby('targetscan', 'waitcount', 1)

# executor.submit(SZheConsole, urls)

SZheConsole.delay(urls)

target = core.GetTargetCount()

return render_template('console.html', bugbit=bugbit, bugtype=bugtype, counts=counts, lastscantime=lastscantime,

ports=ports, services=services, target=target)

可以看到原来的处理方式是多进程处理

executor.submit(SZheConsole, urls)

将原来的处理方式代码注释掉后,关键代码修改为

SZheConsole.delay(urls)

这样就可以将耗时任务丢给Celery进行处理,页面立即返回

return render_template('console.html', bugbit=bugbit, bugtype=bugtype, counts=counts, lastscantime=lastscantime,ports=ports, services=services, target=target)

接着启动redis和Celery服务,启动redis自不用说,Celery启动命令为:

celery worker -A celerytask.celery -l INFO

(可以看出-A参数celery与文件名的关系

运行后的部分截图为:

接着启动Flask服务,在任务控制台输入需要扫描的网址:

新建任务后查看Celery的日志信息,可以看到运行成功,同时与使用原生线程/进程一样,浏览器立即返回,异步处理成功。

后面的博客将学习使用Celery中更流行的用法,也是原生线程/进程很难做到的部分,如显示进度条,暂停删除任务,显示后台任务状态等。

既然使用了Celery就应当把它的威力发挥到最大,以上

且听下回 咕咕咕

参考链接:

flask异步操作_Python Flask后端异步处理(三)相关推荐

  1. python安装flask模块_python Flask模块部署

    python Flask模块部署 简介 python Flask作为python中的一个微框架,它提供了一个web应用后端处理的框架,通过Flask中封装好的api来进行网页的渲染.及定制api的实现 ...

  2. python flask安装_python flask安装和命令详解

    Flask Web开发实战学习笔记 Flask简介 Flask是使用Python编写的Web微框架.Web框架可以让我们不用关 心底层的请求响应处理,更方便高效地编写Web程序.因为Flask核心简 ...

  3. python flask 部署_python flask 部署

    flask在开发的时候,经常启动本身进行调试(本身可以设置监听的端口,例如 在app.run(port=8088),当然默认不设置端口为5000). 但生产环境经常使用uswgi充当flask的宿主, ...

  4. python安装flask框架_Python Flask框架的安装

    Flask 框架是 Python 中一个比较重要的框架,在开发网站中极具优势,下面进行具体介绍. FIask框架简介 Flask 是当前流行的 Web 网站框架,它是基于 Python 实现的.Fla ...

  5. flask异步操作_Flask 异步化

    web网站包含前端和后端, 异步处理可以用在前端, 也可以用在后端.  前端 jquery 进行 ajax 请求时, 可设置 async 属性为 true, 并为 success 设置一个 callb ...

  6. python flask web开发_Python Flask web后端开发

    1 路由选择 from flask import Flask from flask import request from flask import make_response from flask ...

  7. Hadoop+hive+flask+echarts大数据可视化项目之flask结合echarts前后端结合显示hive分析结果

    Hadoop+hive+flask+echarts大数据可视化项目(五) ------flask与echarts前后端结合显示hive分析结果------- 关注过Hadoop+hive+flask+ ...

  8. flask redis_在Flask应用程序中将Redis队列用于异步任务

    flask redis By: Content by Edward Krueger and Josh Farmer, and Douglas Franklin. 作者: 爱德华·克鲁格 ( Edwar ...

  9. 取后端数据_用 Flask+Axios 实现前后端数据通信:查询动森鱼类价格

    对于数据分析/挖掘工程师,能把自己的数据分析or建模结果做成前后端兼备的 demo 是个比较有用的技能,这里介绍一种比较简单的实现方式,无需数据库,用 Flask 启动后端,依赖 Axios 实现前后 ...

最新文章

  1. mysql autoextend_innodb_autoextend_increment':问题解决方法
  2. HDU - 5381 The sum of gcd(莫队/线段树区间合并)
  3. user.config.ts文件里定义的配置是如何合并到SAP Spartacus的标准配置里去的
  4. 【渝粤教育】广东开放大学 Linux操作系统 形成性考核 (55)
  5. UIImageView01
  6. 作者:夏帆(1988-),男,华东师范大学计算机科学与软件工程学院博士后。...
  7. [JS]图片自动切换效果(学习笔记)
  8. 语言学 —— 中文的构词与规律
  9. cognos安装和配置即席报表流程
  10. opera官方教程 预订二
  11. 使用Resource Hacker 实现替换exe图标的
  12. Cannot use import statement outside a module
  13. Celeron D的型号参考
  14. linux安装VNC远程桌面环境
  15. 图数据库发展趋势概览
  16. 18天精读掌握《费曼物理学讲义卷一》 第1天 2019/6.12
  17. Ubuntu boot-repair系统修复引导
  18. 【Cocos游戏实战】功夫小子第六课之游戏主功能场景的分析和实现
  19. 亮风台提出基于图形匹配的可变形表面跟踪新算法 | ICCV 2019
  20. delmia机器人示教01

热门文章

  1. 最优的去重处理——HashSet去重
  2. 大数据中用到的新的数据类型bigint、decimal、smallint、tinyint
  3. 解决谷歌浏览器在非https下限制获取多媒体对象(音视频)的解决方式
  4. c语言使用指定字符串替换特定的子串
  5. 三层交换机原理:01路由器如何隔离广播域?
  6. Pytorch Bi-LSTM + CRF 代码详解
  7. LeetCode简单题之自除数
  8. Minkowski修剪
  9. centos7 下搭建git服务器
  10. spring 组件基于注解的注册方式