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 代码
Sep 07 Python
python操作excel的方法(xlsxwriter包的使用)
Jun 11 Python
Python对象属性自动更新操作示例
Jun 15 Python
在win10和linux上分别安装Python虚拟环境的方法步骤
May 09 Python
深入了解Django View(视图系统)
Jul 23 Python
django 微信网页授权登陆的实现
Jul 30 Python
Python读取表格类型文件代码实例
Feb 17 Python
python图形界面开发之wxPython树控件使用方法详解
Feb 24 Python
python开发实例之python使用Websocket库开发简单聊天工具实例详解(python+Websocket+JS)
Mar 18 Python
在tensorflow下利用plt画论文中loss,acc等曲线图实例
Jun 15 Python
python3中数组逆序输出方法
Dec 01 Python
浅谈matplotlib默认字体设置探索
Feb 03 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 获取select下拉列表框的值
2010/05/08 PHP
PHP实现的简单网络硬盘
2015/07/29 PHP
PHP文件下载实例代码浅析
2016/08/17 PHP
php中的单引号、双引号和转义字符详解
2017/02/16 PHP
PHP实现数组向任意位置插入,删除,替换数据操作示例
2019/04/05 PHP
php查看一个变量的占用内存的实例代码
2020/03/29 PHP
JS和函数式语言的三特性
2014/03/05 Javascript
java必学必会之static关键字
2015/12/03 Javascript
基于JavaScript实现快速转换文本语言(繁体中文和简体中文)
2016/03/07 Javascript
jQuery新窗口打开外链接
2016/07/21 Javascript
canvas绘制爱心的几种方法总结(推荐)
2017/10/31 Javascript
Vue中插入HTML代码的方法
2018/09/21 Javascript
使用JS location实现搜索框历史记录功能
2019/12/23 Javascript
Vue解决移动端弹窗滚动穿透问题
2020/12/15 Vue.js
Linux RedHat下安装Python2.7开发环境
2017/05/20 Python
Python Django Cookie 简单用法解析
2019/08/13 Python
django 使用 PIL 压缩图片的例子
2019/08/16 Python
python yield关键词案例测试
2019/10/15 Python
Python迭代器iterator生成器generator使用解析
2019/10/24 Python
Python常用模块logging——日志输出功能(示例代码)
2019/11/20 Python
Python-for循环的内部机制
2020/06/12 Python
html5基础标签(html5视频标签 html5新标签用法)
2013/12/30 HTML / CSS
最耐用行李箱,一箱永流传:Briggs & Riley(全球终身保修)
2017/12/07 全球购物
Fossil美国官网:化石手表、手袋、首饰及配饰
2019/02/17 全球购物
介绍一下linux文件系统分配策略
2012/11/17 面试题
Windows和Linux动态库应用异同
2016/07/28 面试题
如何获得EntityManager
2014/02/09 面试题
怎样在 Applet 中建立自己的菜单(MenuBar/Menu)?
2012/06/20 面试题
市场营销专业推荐信
2013/11/03 职场文书
服装设计专业毕业生求职信
2014/04/09 职场文书
优秀学生评语大全
2014/04/25 职场文书
初中差生评语
2014/12/29 职场文书
运动会1000米加油稿
2015/07/21 职场文书
小学秋季运动会通讯稿
2015/11/25 职场文书
解决tk mapper 通用mapper的bug问题
2021/06/16 Java/Android
Win11电脑显示本地时间与服务器时间不一致怎么解决?
2022/04/05 数码科技