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 代码效率的方法
Jul 03 Python
Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例
Mar 15 Python
python中reader的next用法
Jul 24 Python
python 获得任意路径下的文件及其根目录的方法
Feb 16 Python
安装docker-compose的两种最简方法
Jul 30 Python
基于python的selenium两种文件上传操作实现详解
Sep 19 Python
python 下 CMake 安装配置 OPENCV 4.1.1的方法
Sep 30 Python
python中必要的名词解释
Nov 20 Python
django rest framework使用django-filter用法
Jul 15 Python
Python使用pickle进行序列化和反序列化的示例代码
Sep 22 Python
Python爬虫之Selenium鼠标事件的实现
Dec 04 Python
tensorflow中的梯度求解及梯度裁剪操作
May 26 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
Win2003服务器安全加固设置--进一步提高服务器安全性
2007/05/23 PHP
PHP转盘抽奖接口实例
2015/02/09 PHP
简单谈谈php延迟静态绑定
2016/01/26 PHP
Laravel学习教程之View模块详解
2017/09/18 PHP
JS获取IUSR_机器名和IWAM_机器名帐号的密码
2006/12/06 Javascript
一组JS创建和操作表格的函数集合
2009/05/07 Javascript
zeroclipboard 单个复制按钮和多个复制按钮的实现方法
2014/06/14 Javascript
详解javascript遍历方式
2015/11/11 Javascript
js弹出对话框方式小结
2015/11/17 Javascript
jQuery Dialog 取消右上角删除按钮事件
2016/09/07 Javascript
node.js实现博客小爬虫的实例代码
2016/10/08 Javascript
Map.vue基于百度地图组件重构笔记分享
2017/04/17 Javascript
Nuxt.js实战详解
2018/01/18 Javascript
Angular angular-file-upload文件上传的示例代码
2018/08/23 Javascript
vue-cli整合vuex的时候,修改actions和mutations,实现热部署的方法
2018/09/19 Javascript
如何从零开始手写Koa2框架
2019/03/22 Javascript
详解vuex持久化插件解决浏览器刷新数据消失问题
2019/04/15 Javascript
js核心基础之构造函数constructor用法实例分析
2019/05/11 Javascript
Vue3配置axios跨域实现过程解析
2020/11/25 Vue.js
[02:17]快乐加倍!DOTA2食人魔魔法师至宝+迎霜节活动上线
2019/12/22 DOTA
Eclipse中Python开发环境搭建简单教程
2016/03/23 Python
Python 中urls.py:URL dispatcher(路由配置文件)详解
2017/03/24 Python
用python实现百度翻译的示例代码
2018/03/09 Python
python中pip的安装与使用教程
2018/08/10 Python
Python爬虫学习之翻译小程序
2019/07/30 Python
Python pip使用超时问题解决方案
2020/08/03 Python
Python+OpenCV图像处理—— 色彩空间转换
2020/10/22 Python
Missguided美国官网:英国时尚品牌
2018/01/18 全球购物
阿联酋彩妆品牌:OUD MILANO
2019/10/06 全球购物
先进个人事迹材料
2014/01/25 职场文书
20年同学聚会邀请函
2014/02/04 职场文书
投标授权委托书范文
2014/08/02 职场文书
城管个人总结
2015/02/28 职场文书
团组织推荐意见
2015/06/05 职场文书
springBoot基于webSocket实现扫码登录
2021/06/22 Java/Android
SQL语句多表联合查询的方法示例
2022/04/18 MySQL