python异步任务队列示例

时间:2021-05-04 03:09:07 

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


#!/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,异步,队列
0
投稿

猜你喜欢

  • 鼠标实现图片的渐有渐无

    2013-06-30 02:49:10
  • windows及linux环境下永久修改pip镜像源的方法

    2021-02-19 09:08:59
  • 全透视:CSS Z-index 属性

    2009-09-21 12:52:00
  • Go语言Grpc Stream的实现

    2023-08-07 06:19:23
  • 利用Python进行数据可视化的实例代码

    2023-11-24 10:21:45
  • Python通用验证码识别OCR库ddddocr的安装使用教程

    2021-11-04 21:21:27
  • 轻松掌握SQL Server存储过程的命名标准

    2009-01-15 13:14:00
  • javascript实现数独解法

    2023-10-17 17:18:28
  • python 绘制场景热力图的示例

    2022-01-22 07:03:21
  • 如何从MySQL数据库表中检索数据

    2008-11-01 17:08:00
  • PyTorch 迁移学习实践(几分钟即可训练好自己的模型)

    2021-09-07 23:37:31
  • Python实现统计给定字符串中重复模式最高子串功能示例

    2023-07-22 23:42:44
  • python接入使用百度翻译流程

    2022-11-26 01:01:43
  • Python中OpenCV Tutorials 20  高动态范围成像的实现步骤

    2022-04-02 07:24:20
  • django美化后台django-suit的安装配置操作

    2021-12-19 23:13:25
  • J2EE基础应用:J2EE中SQL语句自动构造方法

    2009-09-18 09:06:00
  • js选取多个或单个元素的实现代码(用class)

    2023-08-24 16:51:29
  • python使用Random随机生成列表的方法实例

    2021-08-12 12:08:54
  • Python之维度dim的定义及其理解使用方式

    2021-06-10 12:33:04
  • 使用BULK INSERT大批量导入数据 SQLSERVER

    2012-01-05 19:26:36
  • asp之家 网络编程 m.aspxhome.com