Python异步任务队列,python异步队列,#!/usr/bin/e


#!/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)    async_call(func_c, handle_result, 1, 2, 3, 4)    _task_queue.join()#该片段来自于http://byrx.net

评论关闭