当前位置 博文首页 > python异步任务队列示例

    python异步任务队列示例

    作者:admin 时间:2021-07-03 18:42

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

    复制代码 代码如下:

    #!/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()

    jsjbwy
    下一篇:没有了