python异步任务队列示例_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()

时间: 2024-08-03 20:42:18

python异步任务队列示例_python的相关文章

python合并文本文件示例_python

python实现两个文本合并 employee文件中记录了工号和姓名 复制代码 代码如下: cat employee.txt:100 Jason Smith200 John Doe300 Sanjay Gupta400 Ashok Sharma bonus文件中记录工号和工资 复制代码 代码如下: cat bonus.txt:100 $5,000200 $500300 $3,000400 $1,250 要求把两个文件合并并输出如下, 处理结果: 复制代码 代码如下: 400 ashok shar

使用cx_freeze把python打包exe示例_python

需要使用到的文件wxapp.py, read_file.py, setup.py 复制代码 代码如下: #!/usr/bin/env python# -*- coding: utf-8 -*-#file: wxapp.py import wximport osimport sysimport read_file class Frame(wx.Frame):    def __init__(self):        wx.Frame.__init__(self, parent=None, tit

python解析文件示例_python

python最近的工作主要是组件兼容性测试,原有的框架有很多功能还不完善,需要补充!比如,需要将AutoIt脚本的执行结果写入到Excel中,最后的解决方案是使用本地的log来解析这个结果! 增加了如下一个类来完成上述功能: 复制代码 代码如下: class AutoItResultParser():    def ParseResult(self, vm_result, log_file):        for case_result in vm_result.cases_results: 

python访问sqlserver示例_python

最近遇到了Python访问SqlServer的问题,这里总结下. 一.Windows下配置Python访问Sqlserver 环境:Windows 7 + Sqlserver 2008 1.下载并安装pyodbc 下载地址:http://code.google.com/p/pyodbc/downloads/list 2.访问SqlServer 复制代码 代码如下: >>> import pyodbc>>>cnxn = pyodbc.connect('DRIVER={SQ

使用Protocol Buffers的C语言拓展提速Python程序的示例_python

 Protocol Buffers (类似XML的一种数据描述语言)最新版本2.3里,protoc-py_out命令只生成原生的Python代码. 尽管PB(Protocol Buffers)可以为C++语言生成快速解析和序列化代码,但是这种方式对于Python不适用,并且手动生成的已包装的代码需要非常大的维护工作.在讨论组里,这是一个常见的功能要求,由于一个必备的客户端组件-AppEngine(根据团队介绍名称为AppEngine),生成原生的Python代码有更高的优先级. 幸运的是, PB

python字符串替换示例_python

php5.2升级到5.3后,原& new的写法已经被放弃了,可以直接new了,面对上百个php文件,手动修改简直是想要命,所以写了个脚本,分分钟搞定. 复制代码 代码如下: #-*- coding:utf-8 -*- #!/usr/bin/python   import os #定义程序根目录rootpath='D:\\wamp\\www\\erp\\app' def m_replace(path): for item in os.listdir(path):  nowpath=os.path.

python转换摩斯密码示例_python

复制代码 代码如下: CODE = {'A': '.-',     'B': '-...',   'C': '-.-.',        'D': '-..',    'E': '.',      'F': '..-.',        'G': '--.',    'H': '....',   'I': '..',        'J': '.---',   'K': '-.-',    'L': '.-..',        'M': '--',     'N': '-.',     'O'

python创建线程示例_python

复制代码 代码如下: import threadingfrom time import sleep def test_func(id):    for i in range(0,5):        sleep(1)        print('thread %d is running %d' % (id,i)) threads = []for i in range(0,3):    t = threading.Thread(target=test_func, args=(i,))    thr

python celery异步任务队列(redis + supervisor)例子

celery简介: celery是一个异步任务队列/基于分布式消息传递的作业队列.它侧重于实时操作,但对调度支持也很好. celery是用Python编写的,但该协议可以在任何语言实现.更多简介的请自己在网上搜索   本文目的是用python使用celery做异步任务,在centos 6.4上安装celery,并用supervisor来管理celery进程,celery采用redis做中间件的消息传输.现实中可以celery做异步请求,如发送邮箱,发送消息,请求URL等场景   环境部署   环