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 相关文章推荐
在Django中创建动态视图的教程
Jul 15 Python
python学生信息管理系统
Mar 13 Python
Python装饰器的执行过程实例分析
Jun 04 Python
vue.js实现输入框输入值内容实时响应变化示例
Jul 07 Python
python使用Matplotlib画饼图
Sep 25 Python
详解Python基础random模块随机数的生成
Mar 23 Python
详解Numpy中的数组拼接、合并操作(concatenate, append, stack, hstack, vstack, r_, c_等)
May 27 Python
Python循环中else,break和continue的用法实例详解
Jul 11 Python
Python树莓派学习笔记之UDP传输视频帧操作详解
Nov 15 Python
Python超越函数积分运算以及绘图实现代码
Nov 20 Python
Python Numpy中数据的常用保存与读取方法
Apr 01 Python
python MultipartEncoder传输zip文件实例
Apr 07 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+javascript实现二级级联菜单的制作
2008/05/06 PHP
php反弹shell实现代码
2009/04/22 PHP
关于页面优化和伪静态
2009/10/11 PHP
PHP中获取变量的变量名的一段代码的bug分析
2011/07/07 PHP
PHP的PSR规范中文版
2013/09/28 PHP
ThinkPHP中使用Ueditor富文本编辑器
2015/09/02 PHP
PHP如何读取由JavaScript设置的Cookie
2017/03/22 PHP
php实现的双色球算法示例
2017/06/20 PHP
PHP预定义超全局数组变量小结
2018/08/20 PHP
大家未必知道的Js技巧收藏
2008/04/07 Javascript
js验证模型自我实现的具体方法
2013/06/21 Javascript
js中return false(阻止)的用法
2013/08/14 Javascript
jQuery页面加载初始化的3种方法(推荐)
2016/06/02 Javascript
bootstrap的工具提示实例代码
2017/05/17 Javascript
微信小程序swiper组件用法实例分析【附源码下载】
2017/12/07 Javascript
react redux入门示例
2018/04/19 Javascript
详解Node.js 中使用 ECDSA 签名遇到的坑
2018/11/26 Javascript
微信小程序实现发送验证码按钮效果
2018/12/20 Javascript
Vue.js实现大屏数字滚动翻转效果
2019/11/29 Javascript
JavaScript实现拖拽盒子效果
2020/02/06 Javascript
node.JS事件机制与events事件模块的使用方法详解
2020/02/06 Javascript
Python中使用SAX解析xml实例
2014/11/21 Python
在Python上基于Markov链生成伪随机文本的教程
2015/04/17 Python
Django框架中的对象列表视图使用示例
2015/07/21 Python
PyCharm设置护眼背景色的方法
2018/10/29 Python
python ChainMap 合并字典的实现步骤
2019/06/11 Python
python+numpy实现的基本矩阵操作示例
2019/07/19 Python
森海塞尔美国官网:Sennheiser耳机与耳麦
2017/07/19 全球购物
牛津在线药房:Oxford Online Pharmacy
2020/11/16 全球购物
介绍一下Cookie和Session及他们之间的区别
2012/11/20 面试题
大专毕业生自我评价分享
2013/11/10 职场文书
统计员岗位职责
2013/11/14 职场文书
教师国庆节演讲稿范文2014
2014/09/21 职场文书
部队2014年终工作总结
2014/11/27 职场文书
mysql5.5中文乱码问题解决的有用方法
2022/05/30 MySQL
使用CSS实现音波加载效果
2023/05/07 HTML / CSS