python异步任务队列示例


Posted in Python onApril 01, 2014

很多场景为了不阻塞,都需要异步回调机制。这是一个简单的例子,大家参考使用吧

#!/usr/bin/env python
# -*- coding: UTF-8 -*-import logging
import queue
import threading
def func_a(a, b):
    return a + b
def func_b():
    pass
def func_c(a, b, c):
    return a, b, c
# 异步任务队列
_task_queue = queue.Queue()
def async_call(function, callback, *args, **kwargs):
    _task_queue.put({
        'function': function,
        'callback': callback,
        'args': args,
        'kwargs': kwargs
    })
def _task_queue_consumer():
    """
    异步任务队列消费者
    """
    while True:
        try:
            task = _task_queue.get()
            function = task.get('function')
            callback = task.get('callback')
            args = task.get('args')
            kwargs = task.get('kwargs')
            try:
                if callback:
                    callback(function(*args, **kwargs))
            except Exception as ex:
                if callback:
                    callback(ex)
            finally:
                _task_queue.task_done()
        except Exception as ex:
            logging.warning(ex)
def handle_result(result):
    print(type(result), result)
if __name__ == '__main__':
    t = threading.Thread(target=_task_queue_consumer)
    t.daemon = True
    t.start()
    async_call(func_a, handle_result, 1, 2)
    async_call(func_b, handle_result)
    async_call(func_c, handle_result, 1, 2, 3)
    async_call(func_c, handle_result, 1, 2, 3, 4)
    _task_queue.join()
Python 相关文章推荐
Python编程中用close()方法关闭文件的教程
May 24 Python
Python入门之三角函数tan()函数实例详解
Nov 08 Python
Python实现的文本对比报告生成工具示例
May 22 Python
使用 Python 实现简单的 switch/case 语句的方法
Sep 17 Python
Django ManyToManyField 跨越中间表查询的方法
Dec 18 Python
对Python 获取类的成员变量及临时变量的方法详解
Jan 22 Python
python logging模块书写日志以及日志分割详解
Jul 22 Python
python创建与遍历List二维列表的方法
Aug 16 Python
pymysql 开启调试模式的实现
Sep 24 Python
pycharm激活码有效到2020年11月底
Sep 18 Python
Pytorch实现图像识别之数字识别(附详细注释)
May 11 Python
Golang Web 框架Iris安装部署
Aug 14 Python
用Python编程实现语音控制电脑
Apr 01 #Python
35个Python编程小技巧
Apr 01 #Python
ptyhon实现sitemap生成示例
Mar 30 #Python
python实现百度关键词排名查询
Mar 30 #Python
python获取网页状态码示例
Mar 30 #Python
python单线程实现多个定时器示例
Mar 30 #Python
python实现猜数字游戏(无重复数字)示例分享
Mar 29 #Python
You might like
php使用curl抓取qq空间的访客信息示例
2014/02/28 PHP
9条PHP编程小知识及易犯的小错误
2015/01/22 PHP
Symfony的安装和配置方法
2016/03/17 PHP
实例讲解PHP表单验证功能
2019/02/15 PHP
event对象的方法 兼容多浏览器
2009/06/27 Javascript
jquery validation验证身份证号,护照,电话号码,email(实例代码)
2013/11/06 Javascript
在Mac OS下使用Node.js的简单教程
2015/06/24 Javascript
AngularJS基础教程之简单介绍
2015/09/27 Javascript
Sublime Text 3常用插件及安装方法
2015/12/16 Javascript
通过JS和PHP两种方法判断用户请求时使用的浏览器类型
2016/09/01 Javascript
Bootstrap和Java分页实例第二篇
2016/12/23 Javascript
详解javascript表单的Ajax提交插件的使用
2016/12/29 Javascript
浅谈JavaScript的函数及作用域
2016/12/30 Javascript
详解cordova打包成webapp的方法
2017/10/18 Javascript
[01:07:47]Secret vs Optic Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
Python ORM框架SQLAlchemy学习笔记之数据查询实例
2014/06/10 Python
Python的Flask框架中@app.route的用法教程
2015/03/31 Python
遗传算法python版
2018/03/19 Python
python在文本开头插入一行的实例
2018/05/02 Python
Python Flask 搭建微信小程序后台详解
2019/05/06 Python
HTML5调用手机发短信和打电话功能
2020/04/29 HTML / CSS
巧克力领导品牌瑞士莲美国官网:Lindt Chocolate美国
2016/08/25 全球购物
加拿大票务网站:Ticketmaster加拿大
2017/07/17 全球购物
数以千计的折扣工业产品:ESE Direct
2018/05/20 全球购物
Tea Collection官网:一家位于旧金山的童装公司
2020/08/07 全球购物
Java中采用什么结构来捕获、处理异常?各子句的顺序、功能如何
2013/10/07 面试题
2014小学植树节活动总结
2014/03/10 职场文书
企业年会主持词
2014/03/27 职场文书
公证书标准格式
2014/04/10 职场文书
2014幼儿园卫生保健工作总结
2014/12/05 职场文书
2014年生产管理工作总结
2014/12/23 职场文书
作弊检讨书
2015/01/27 职场文书
运动会闭幕式主持词
2015/07/01 职场文书
vue-cropper插件实现图片截取上传组件封装
2021/05/27 Vue.js
go语言使用Casbin实现角色的权限控制
2021/06/26 Golang
Python中使用tkFileDialog实现文件选择、保存和路径选择
2022/05/20 Python