Python多线程异步任务队列(实例)详解编程语言

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

python的多线程异步常用到queue和threading模块

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

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/8325.html

(0)
上一篇 2021年7月18日
下一篇 2021年7月18日

相关推荐

发表回复

登录后才能评论