python异步任务队列示例

yipeiwu_com5年前Python基础

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

复制代码 代码如下:

#!/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连续赋值可能引发的错误

今天写的代码片段: X = Y = [] .. X.append(x) Y.append(y) 其中x和y是读取的每一个数据的xy值,打算将其归入列表之后绘散点图,但是绘图出来却是...

python统计日志ip访问数的方法

本文实例讲述了python统计日志ip访问数的方法。分享给大家供大家参考。具体如下: import re f=open("/tmp/a.log","r") arr={} lines...

浅谈scrapy 的基本命令介绍

如下所示: scrapy stratproject projectname  ##创建一个项目 scrapy genspider myspidername fider ...

如何用C代码给Python写扩展库(Cython)

如何用C代码给Python写扩展库(Cython)

之前一篇文章里提到了利用Cython来编译Python,这次来讲一下如何用Cython给Python写扩展库。 两种语言混合编程,其中最重要的是类型的传递。 我们用一个简单的例子进行入门...

python基于itchat模块实现微信防撤回

有时候,女神发来一条消息,说约你看电影,她考虑了一下,又撤回了,不约你了…而你又想知道她究竟发了什么,该怎么办?微信防撤回了解一下。 环境要求 Python3 电脑 安装itcha...