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 with用法实例
Apr 14 Python
Python中join和split用法实例
Apr 14 Python
python基础之入门必看操作
Jul 26 Python
对Python3 解析html的几种操作方式小结
Feb 16 Python
python操作日志的封装方法(两种方法)
May 23 Python
python绘图模块matplotlib示例详解
Jul 26 Python
基于python3监控服务器状态进行邮件报警
Oct 19 Python
python求绝对值的三种方法小结
Dec 04 Python
Python django框架开发发布会签到系统(web开发)
Feb 12 Python
Python图像处理库PIL的ImageEnhance模块使用介绍
Feb 26 Python
用Python进行websocket接口测试
Oct 16 Python
利用Python脚本写端口扫描器socket,python-nmap
Jul 23 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非阻塞调用类
2018/07/26 PHP
PHP中散列密码的安全性分析
2019/07/26 PHP
基于jquery的loading效果实现代码
2010/11/05 Javascript
IE8提示Invalid procedure call or argument 异常的解决方法
2012/09/30 Javascript
javascript中传统事件与现代事件
2015/06/23 Javascript
jQuery实现的多级下拉菜单效果代码
2015/08/24 Javascript
Jquery和angularjs获取check框选中的值的方法汇总
2016/01/17 Javascript
json格式数据的添加,删除及排序方法
2016/01/21 Javascript
AngularJS 中的指令实践开发指南(一)
2016/03/20 Javascript
vue.js动态数据绑定学习笔记
2017/05/19 Javascript
详解vue.js+UEditor集成 [前后端分离项目]
2017/07/07 Javascript
vue Element-ui input 远程搜索与修改建议显示模版的示例代码
2017/10/19 Javascript
详解Angular结合zTree异步加载节点数据
2018/01/20 Javascript
vue实现个人信息查看和密码修改功能
2018/05/06 Javascript
mock.js实现模拟生成假数据功能示例
2019/01/15 Javascript
推荐一个基于Node.js的表单验证库
2019/02/15 Javascript
小程序实现短信登录倒计时
2019/07/12 Javascript
微信小程序用户授权弹窗 拒绝时引导用户重新授权实现
2019/07/29 Javascript
javascript前端和后台进行数据交互方法示例
2020/08/07 Javascript
JavaScript事件委托实现原理及优点进行
2020/08/29 Javascript
JavaScript实现单点登录的示例
2020/09/23 Javascript
[01:04:02]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第二场 1月24日
2021/03/11 DOTA
Python3内置模块之json编解码方法小结【推荐】
2020/12/09 Python
pandas分区间,算频率的实例
2019/07/04 Python
计算pytorch标准化(Normalize)所需要数据集的均值和方差实例
2020/01/15 Python
Python使用monkey.patch_all()解决协程阻塞问题
2020/04/15 Python
python 引用传递和值传递详解(实参,形参)
2020/06/05 Python
PyCharm2020.1.2社区版安装,配置及使用教程详解(Windows)
2020/08/07 Python
在HTML5 Canvas中放入图片和保存为图片的方法
2014/05/03 HTML / CSS
美国知名保健品网站:LuckyVitamin(支持中文)
2017/08/09 全球购物
.NET常见笔试题集
2012/12/01 面试题
母亲七十大寿答谢词
2014/01/18 职场文书
民族团结先进个人材料
2014/02/05 职场文书
大学生逃课检讨书
2015/05/04 职场文书
培训讲师开场白
2015/06/01 职场文书
同学会感言
2015/07/30 职场文书