博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python异步任务队列
阅读量:2399 次
发布时间:2019-05-10

本文共 1338 字,大约阅读时间需要 4 分钟。

很多场景为了不阻塞,都需要异步回调机制。这是一个简单的例子。

#!/usr/bin/env python# -*- coding: UTF-8 -*-import loggingimport queueimport threadingdef func_a(a, b):    return a + bdef func_b():    passdef 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)        _task_queue.join()

转载地址:http://blfob.baihongyu.com/

你可能感兴趣的文章
清华梦的粉碎读后感--论理想主义者王垠
查看>>
关于Oracle的技术问答
查看>>
增量数据丢失的原因分析(三)
查看>>
生活中的优化和向往(r11笔记第72天)
查看>>
最近的几个技术问题总结和答疑(七)
查看>>
每一次退缩之后的努力,都是极大的进步
查看>>
使用sysbench压力测试MySQL(一)(r11笔记第3天)
查看>>
MySQL 5.6, 5.7并行复制测试(r12笔记第9天)
查看>>
容灾切换中的数据库宕机问题简单分析(一)
查看>>
几年前的一次答疑解惑
查看>>
MySQL RR隔离级别的更新冲突策略
查看>>
MySQL索引条件下推的简单测试
查看>>
通过SQL解读财富的分配(二)
查看>>
一个MySQL死锁问题的复现
查看>>
数据迁移中的几个问题总结
查看>>
心理学中的效应简单解读(r12笔记第24天)
查看>>
mysqldump简单解析
查看>>
Oracle备库无法连接主库的问题分析
查看>>
最近一周的学习计划
查看>>
MySQL备份和恢复工具图谱
查看>>