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构建Hopfield网络的教程
Apr 14 Python
Python中处理字符串之islower()方法的使用简介
May 19 Python
Python3字符串学习教程
Aug 20 Python
浅析Python中的多条件排序实现
Jun 07 Python
python使用os.listdir和os.walk获得文件的路径的方法
Dec 16 Python
Python代码块批量添加Tab缩进的方法
Jun 25 Python
Python3自动签到 定时任务 判断节假日的实例
Nov 13 Python
Python魔法方法功能与用法简介
Apr 04 Python
教你一步步利用python实现贪吃蛇游戏
Jun 27 Python
Python生成器实现简单"生产者消费者"模型代码实例
Mar 27 Python
python中Django文件上传方法详解
Aug 05 Python
python使用glob检索文件的操作
May 20 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
thinkphp3.x中cookie方法的用法分析
2016/05/19 PHP
php libevent 功能与使用方法详解
2020/03/04 PHP
Jquery 学习笔记(一)
2009/10/13 Javascript
jquery 问答知识整理
2010/02/11 Javascript
jQuery点击改变class并toggle及toggleClass()方法定义用法
2015/12/11 Javascript
AngularJS 指令详细介绍
2016/07/27 Javascript
AngularJS控制器之间的通信方式详解
2016/11/03 Javascript
vue学习笔记之v-if和v-show的区别
2017/09/20 Javascript
js+html5实现手机九宫格密码解锁功能
2018/07/30 Javascript
详解webpack打包nodejs项目(前端代码)
2018/09/19 NodeJs
浅析Vue.js中v-bind v-model的使用和区别
2018/12/04 Javascript
Vue 样式绑定的实现方法
2019/01/15 Javascript
jQuery移动端跑马灯抽奖特效升级版(抽奖概率固定)实现方法
2019/01/18 jQuery
如何根据业务封装自己的功能组件
2019/04/19 Javascript
微信小程序实现动态列表项的顺序加载动画
2019/07/25 Javascript
Elementui表格组件+sortablejs实现行拖拽排序的示例代码
2019/08/28 Javascript
JS插入排序简单理解与实现方法分析
2019/11/25 Javascript
一篇文章让你搞懂JavaScript 原型和原型链
2020/11/23 Javascript
通过数据库对Django进行删除字段和删除模型的操作
2015/07/21 Python
Python编程实现双击更新所有已安装python模块的方法
2017/06/05 Python
理解Python中的绝对路径和相对路径
2017/08/30 Python
python面向对象多线程爬虫爬取搜狐页面的实例代码
2018/05/31 Python
pyqt5 comboBox获得下标、文本和事件选中函数的方法
2019/06/14 Python
python操作excel让工作自动化
2019/08/09 Python
Python类及获取对象属性方法解析
2020/06/15 Python
Python爬虫实战案例之爬取喜马拉雅音频数据详解
2020/12/07 Python
使用gunicorn部署django项目的问题
2020/12/30 Python
css3中背景尺寸background-size详解
2014/09/02 HTML / CSS
Ray-Ban雷朋太阳眼镜英国官网:Ray-Ban UK
2019/11/23 全球购物
香奈儿美国官网:CHANEL美国
2020/05/20 全球购物
如果让你测试一台高速激光打印机,你都会进行哪些测试
2012/12/04 面试题
教学实验楼管理制度
2014/02/01 职场文书
我是一名护士演讲稿
2014/08/28 职场文书
研究生给导师的自荐信
2015/03/06 职场文书
写作技巧:怎样写好一份优秀工作总结?
2019/08/14 职场文书
Mysql数据库中datetime、bigint、timestamp来表示时间选择,谁来存储时间效率最高
2021/08/23 MySQL