python使用flask+Thread实现异步任务

# 定义一个WorkerController,用于执行业务代码
class WorkerController(object):

    def __init__(self):
        pass

    def do_something(self, params):
        print("do something")
# 定义一个AsyncWorker,继承Thread,重写run方法,run方法中调用WorkerController的do_something方法

from threading import Thread
from worker_controller import WorkerController

WORKER_CONTROLLER = WorkerController()

class AsyncWorker(Thread):
    ASYNC_WORKER_INFO = dict()

    def __init__(self, params, ticket_id):
        Thread.__init__(self)
        self.params = params
        self.ticket_id = ticket_id
        self.daemon = True
        self.start()

    def run(self):
        AsyncWorker.ASYNC_WORKER_INFO[self.ticket_id] = {
            # 保存一些业务信息,之后轮询的时候,可以作为输出返回
            "some": "information",
            "status": "running"
        }
        WORKER_CONTROLLER.do_something(self.params)
# 开始任务
@app.route('/do-something', methods=['GET'])
def do_something():
    params = request.args.get('params', '').strip()
    # 生成一个任务id,用于轮询,例如ticket id
    ticket_id = genearteMD5(str(int(round(time.time() * 1000))))
    # 实例化一个AsyncWorker
    AsyncWorker(params=params, ticket_id=ticket_id)
    # 将ticket_id返回
    return jsonify({"ticket_id": ticket_id})

# 轮询任务
@app.route("/check-status", methods=['GET'])
def check_status():
    ticket_id = request.args.get("ticket_id")
    logs = AsyncWorker.ASYNC_WORKER_INFO[str(ticket_id)]
    return jsonify(logs)

如何在前端进行异步轮询呢?以angularjs的interval方法为例:https://www.cnblogs.com/CheeseZH/p/12444034.html

原文地址:https://www.cnblogs.com/CheeseZH/p/12444086.html

时间: 2024-10-31 08:36:54

python使用flask+Thread实现异步任务的相关文章

怎么使用Python和Flask在Linux上创建应用

无论你在linux上娱乐还是工作,这对你而言都是一个使用python来编程的很好的机会,也是一个从零基础开始学习python开发(http://www.maiziedu.com/course/python/)的一个好机会,pyhon学起来很有趣且在实际的应用如yum包管理器中很有用. 给大家分享一个关于很赞的教程贴,本篇教程会带你使用python和一个称为flask的微型框架来构建一个简单的应用,来显示诸如每个进程的内存使用,CPU百分比之类有用的信息. 前置需求 Python基础.列表.类.函

[Python] 运行Flask, 报错:UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 33: ordinal not in range(128)

运行时报错:UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 33: ordinal not in range(128) Python2.7在Windows上一个bug!!! 解决方法: 参考官方patch: http://bugs.python.org/file19332/9291a.patch 如下代码:一,加入from itertools import count: 二,修改 def enum_type

Python的Flask框架入门-Ubuntu

全文请见tuts code:An Introduction to Python's Flask Framework Flask是Python一个小而强大的web框架.学起来简单,用起来也容易,能够帮你在很短的时间内创建web应用. 这篇文章中,我们会创建一个简单的web应用,包含两个静态页面和少许动态内容.尽管Flask能够被用来创建大型的,数据库驱动的网站,但是作为开始,通过静态页面来介绍它的工作流程会更有帮助.在了解了流程之后,我们就可以做出更为复杂的页面.读完本文章,你应该能够用这里的步骤

python的Flask 介绍

Flask 介绍 知识点 微框架.WSGI.模板引擎概念 使用 Flask 做 web 应用 模板的使用 根据 URL 返回特定网页 实验步骤 1. 什么是 Flask? Flask 是一个 web 框架.也就是说 Flask 为你提供工具,库和技术来允许你构建一个 web 应用程序.这个 wdb 应用程序可以使一些 web 页面.博客.wiki.基于 web 的日历应用或商业网站. Flask 属于微框架(micro-framework)这一类别,微架构通常是很小的不依赖于外部库的框架.这既有

python中的thread

转载自: http://blog.sina.com.cn/s/blog_9f488855010198vn.html 正确与否未验证 python中得thread的一些机制和C/C++不同:在C/C++中,主线程结束后,其子线程会默认被主线程kill掉.而在python中,主线程结束后,会默认等待子线程结束后,主线程才退出. python对于thread的管理中有两个函数:join和setDaemon join:如在一个线程B中调用threada.join(),则threada结束后,线程B才会接

基于Sae和Python的flask实现的金山快盘自动签到

第一次写博客园,各位大大请多加照顾哦. 进入正题 功能介绍 架到Sae后,每天定点Sae的服务器就会帮你自动签到金山快盘和自动转盘抽奖.一些记录如下: 金山快盘的签到记录: Sae的Cron的日记: 核心代码 本来想写抓包的过程的,但是感觉很小儿科(如果大家觉得有需要,我再写上来),就不献丑了,直接po上代码. 1 #!/usr/bin/python 2 #-*-coding:utf-8-*- 3 import urllib, urllib2, cookielib, sys 4 5 class

使用python的Flask实现一个RESTful API服务器端[翻译]

最近这些年,REST已经成为web services和APIs的标准架构,很多APP的架构基本上是使用RESTful的形式了. 本文将会使用python的Flask框架轻松实现一个RESTful的服务. REST的六个特性: Client-Server:服务器端与客户端分离. Stateless(无状态):每次客户端请求必需包含完整的信息,换句话说,每一次请求都是独立的. Cacheable(可缓存):服务器端必需指定哪些请求是可以缓存的. Layered System(分层结构):服务器端与客

基于Python的Flask的开发实战(第一节Flask安装)

1.安装python虚拟环境 easy_install virtualenv easy_install pip cd /home/admin virtualenv flask-website source flask-website/bin/activate#进入虚拟环境 deactivate#退出虚拟环境 2.安装flask及依赖包 pip install flask (flask-website)$python >>>import flask >>> #正常没报错,

使用 Python 和 Flask 设计 RESTful API

近些年来 REST (REpresentational State Transfer) 已经变成了 web services 和 web APIs 的标配. 在本文中我将向你展示如何简单地使用 Python 和 Flask 框架来创建一个 RESTful 的 web service. 什么是 REST? 六条设计规范定义了一个 REST 系统的特点: 客户端-服务器: 客户端和服务器之间隔离,服务器提供服务,客户端进行消费. 无状态: 从客户端到服务器的每个请求都必须包含理解请求所必需的信息.换