当前位置: 移动技术网 > IT编程>脚本编程>Python > python异步任务队列示例

python异步任务队列示例

2019年03月31日  | 移动技术网IT编程  | 我要评论

杜达雄2013味道,英国真人秀,郑州牧专教务管理

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

复制代码 代码如下:

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网