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(urlparse)模板的使用方法总结
Oct 13 Python
python dict 相同key 合并value的实例
Jan 21 Python
python3.6+django2.0+mysql搭建网站过程详解
Jul 24 Python
python实现图像检索的三种(直方图/OpenCV/哈希法)
Aug 08 Python
python函数不定长参数使用方法解析
Dec 14 Python
Python计算公交发车时间的完整代码
Feb 12 Python
django-利用session机制实现唯一登录的例子
Mar 16 Python
Django数据库操作之save与update的使用
Apr 01 Python
pytorch cuda上tensor的定义 以及减少cpu的操作详解
Jun 23 Python
通过实例简单了解python yield使用方法
Aug 06 Python
pytorch 梯度NAN异常值的解决方案
Jun 05 Python
Python OpenCV实现图像模板匹配详解
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程序?
2006/12/08 PHP
php csv操作类代码
2009/12/14 PHP
Warning: session_destroy() : Trying to destroy uninitialized sessionq错误
2011/06/16 PHP
PDO防注入原理分析以及注意事项
2015/02/25 PHP
关于php几种字符串连接的效率比较(详解)
2017/02/22 PHP
Laravel 简单实现Ajax滚动加载示例
2019/10/22 PHP
php中加密解密DES类的简单使用方法示例
2020/03/26 PHP
javascript 在网页中的运用(asp.net)
2009/11/23 Javascript
URL地址中的#符号使用说明
2011/02/12 Javascript
让人期待的2011年度最佳 jQuery 插件分享
2012/03/16 Javascript
node.js中的fs.readFile方法使用说明
2014/12/15 Javascript
javascript从作用域链谈闭包
2020/07/29 Javascript
AngularJS解决ng界面长表达式(ui-set)的方法分析
2016/11/07 Javascript
Javascript基础回顾之(三) js面向对象
2017/01/31 Javascript
使用D3.js制作图表详解
2017/08/13 Javascript
vue+vuex+json-seiver实现数据展示+分页功能
2019/04/11 Javascript
JavaScript中callee和caller的区别与用法实例分析
2019/06/28 Javascript
Layui选项卡制作历史浏览记录的方法
2019/09/28 Javascript
Vue路由切换页面不更新问题解决方案
2020/07/10 Javascript
微信小程序tab左右滑动切换功能的实现代码
2021/02/08 Javascript
matplotlib给子图添加图例的方法
2018/08/03 Python
wxPython之wx.DC绘制形状
2019/11/19 Python
Python使用xlrd实现读取合并单元格
2020/07/09 Python
python如何停止递归
2020/09/09 Python
input元素的url类型和email类型简介
2012/07/11 HTML / CSS
Html5+JS实现手机摇一摇功能
2015/04/24 HTML / CSS
使用HTML5的Canvas绘制曲线的简单方法
2015/09/08 HTML / CSS
使用layui框架实现点击左侧导航切换右侧内容且右侧选项卡跟随变化的效果
2020/11/10 HTML / CSS
有750多个顶级品牌的瑞士时尚在线:ABOUT YOU
2017/01/04 全球购物
SmartBuyGlasses比利时:购买品牌太阳镜和眼镜
2019/08/09 全球购物
奥巴马连任演讲稿
2014/05/15 职场文书
增员口号大全
2014/06/18 职场文书
党员演讲稿
2014/09/04 职场文书
2014年营业员工作总结
2014/11/18 职场文书
85句关于理想的名言警句大全
2019/08/22 职场文书
python中使用 unittest.TestCase单元测试的用例详解
2021/08/30 Python